home *** CD-ROM | disk | FTP | other *** search
/ STraTOS 1997 April & May / STraTOS 1 - 1997 April & May.iso / CD01 / PRGMANIA / @FALCON / VISUAL41 / VISUAL41.S < prev   
Encoding:
Text File  |  1997-02-23  |  73.1 KB  |  2,951 lines

  1.  ifnd GWVA_APP_OBJ_STACK_SIZE
  2.   fail    ; Définissez la taille de la pile !
  3.   end
  4.  endc
  5.  
  6.  ifnd GWVA_MAX_PATH_LENGTH
  7.   fail    ; Définissez la longeur max d'un pathname
  8.   end
  9.  endc
  10.  
  11.  ifnd GWVA_APP_DEP_LIB_VERSION
  12.   fail    ; Définissez la version des librairies
  13.   end
  14.  else
  15.   ifne GWVA_APP_DEP_LIB_VERSION-4
  16.    fail    ; Procurez-vous une version 4.x.y Visual Assembleur
  17.    end
  18.   endc
  19.  endc
  20.  
  21.  ifnd GWVA_APP_DEP_LIB_MAJOR
  22.   fail    ; Définissez le patchlevel majeur
  23.   end
  24.  else
  25.   ifne GWVA_APP_DEP_LIB_MAJOR-1
  26.    fail    ; Procurez-vous une version 4.1.y Visual Assembleur
  27.    end
  28.   endc
  29.  endc
  30.  
  31.  ifnd GWVA_APP_DEP_LIB_MINOR
  32.   fail    ; Définissez le patchlevel mineur
  33.   end
  34.  else
  35.   ifne GWVA_APP_DEP_LIB_MINOR-2
  36.    fail    ; Harmonisez la version de votre source avec la version du Visual Assembleur 4.1.2 (cf. .DEF)
  37.    end
  38.   endc
  39.  endc
  40.  
  41.  ifd MDL_GEM
  42.  
  43.   ifd MDL_TOS
  44.    fail    ; On ne peut pas mettre et MDL_GEM et MDL_TOS
  45.    end
  46.   endc
  47.  
  48.   ifd MDL_WIND
  49.    ifnd GWVA_APP_OBJ_MAX_NUMBER_WIND
  50.     fail    ; Définissez le nombre maximal de fenêtres pour votre application !
  51.     end
  52.    endc
  53.   endc
  54.  
  55.   ifnd MDL_EVENTS
  56.  
  57.    ifd MDL_MENU
  58.     fail    ; MDL_MENU nécessite MDL_EVENTS
  59.     end
  60.    endc
  61.  
  62.    ifd MDL_WIND
  63.     fail    ; MDL_WIND nécessite MDL_EVENTS
  64.     end
  65.    endc
  66.  
  67.   endc        ; ifnd MDL_EVENTS
  68.  
  69.   ifnd MDL_WIND
  70.  
  71.    ifd MDL_WIND_TEXT
  72.     fail    ; MDL_WIND_TEXT nécessite MDL_WIND
  73.     end
  74.    endc
  75.  
  76.    ifd MDL_WIND_FORM
  77.     fail    ; MDL_WIND_FORM nécessite MDL_WIND
  78.     end
  79.    endc
  80.  
  81.    ifd MDL_WIND_BITMAP
  82.     fail    ; MDL_WIND_BITMAP nécessite MDL_WIND
  83.     end
  84.    endc
  85.  
  86.    ifd MDL_WIND_MENU
  87.     fail    ; MDL_WIND_MENU nécessite MDL_WIND
  88.     end
  89.    endc
  90.  
  91.    ifd MDL_WIND_TOOLBAR
  92.     fail    ; MDL_WIND_TOOLBAR nécessite MDL_WIND
  93.     end
  94.    endc
  95.  
  96.   else        ; ifnd MDL_WIND
  97.  
  98.    ifnd MDL_WIND_FORM
  99.     ifd MDL_WIND_TOOLBAR
  100.      fail    ; MDL_WIND_TOOLBAR nécessite MDL_WIND_FORM
  101.      end
  102.     endc
  103.    endc
  104.  
  105.   endc        ; ifnd MDL_WIND
  106.  
  107.  
  108.  else        ; ifd MDL_GEM
  109.  
  110.   ifnd MDL_TOS
  111.    fail    ; Il faut impérativement MDL_GEM ou MDL_TOS
  112.    end
  113.   endc
  114.  
  115.   ifd MDL_EVENTS
  116.    fail    ; MDL_TOS est incompatible avec MDL_EVENTS
  117.    end
  118.   endc
  119.  
  120.   ifd MDL_MENU
  121.    fail    ; MDL_TOS est incompatible avec MDL_MENU
  122.    end
  123.   endc
  124.  
  125.   ifd MDL_WIND
  126.    fail    ; MDL_TOS est incompatible avec MDL_WIND
  127.    end
  128.   endc
  129.  
  130.   ifd MDL_WIND_TEXT
  131.    fail    ; MDL_TOS est incompatible avec MDL_WIND_TEXT
  132.    end
  133.   endc
  134.  
  135.   ifd MDL_WIND_FORM
  136.    fail    ; MDL_TOS est incompatible avec MDL_WIND_FORM
  137.    end
  138.   endc
  139.  
  140.   ifd MDL_WIND_BITMAP
  141.    fail    ; MDL_TOS est incompatible avec MDL_WIND_BITMAP
  142.    end
  143.   endc
  144.  
  145.   ifd MDL_WIND_MENU
  146.    fail    ; MDL_TOS est incompatible avec MDL_WIND_MENU
  147.    end
  148.   endc
  149.  
  150.   ifd LIB_FILESELECTOR
  151.    fail    ; MDL_TOS est incompatible avec LIB_FILESELECTOR
  152.    end
  153.   endc
  154.  
  155.  endc        ; ifd MDL_GEM
  156.  
  157.  ifd FORM_OBJ_PROGRESS
  158.   ifnd LIB_DECI
  159.    fail    ; LIB_DECI est impératif pour l'obet PROGRESS
  160.    end
  161.   endc
  162.  endc
  163.  
  164.  ifd LIB_XHDI_INFOPARTITION
  165.  
  166.   ifnd LIB_XHDI_INQTARGET
  167.    fail    ; LIB_XHDI_READWRITE est impératif pour la librairie LIB_XHDI_INFOPARTITION
  168.    end
  169.   endc
  170.  
  171.   ifnd LIB_XHDI_READWRITE
  172.    fail    ;  LIB_XHDI_READWRITE est impératif pour la librairie LIB_XHDI_INFOPARTITION
  173.    end
  174.   endc
  175.  
  176.  endc        ; LIB_XHDI_INFOPARTITION
  177.  
  178.  ifd OPT_DEBUG_VISUAL_WIND_OBJ_EVNT        ; pour pas gèner plus tard...
  179. OPT_DEBUG_VISUAL_WIND_SYSTEM_OBJ_EVNT
  180.  else
  181.   ifd OPT_DEBUG_VISUAL_SYSTEM_EVNT
  182. OPT_DEBUG_VISUAL_WIND_SYSTEM_OBJ_EVNT
  183.   endc
  184.  endc
  185.  
  186.  ifd OPT_DEBUG_VISUAL_WIND_SYSTEM_OBJ_EVNT
  187.   ifnd LIB_HEXA
  188.    fail    ; LIB_HEXA est impératif pour debugger avec OPT_DEBUG_VISUAL_WIND_OBJ_EVNT ou OPT_DEBUG_VISUAL_SYSTEM_EVNT
  189.    end
  190.   endc
  191.   ifnd LIB_DECI
  192.    fail    ; LIB_DECI est impératif pour debugger avec OPT_DEBUG_VISUAL_WIND_OBJ_EVNT ou OPT_DEBUG_VISUAL_SYSTEM_EVNT
  193.    end
  194.   endc
  195.  endc
  196.  
  197.  ifd OPT_DEBUG_VISUAL_FORM_OBJ_EVNT
  198.   ifnd LIB_DECI
  199.    fail    ; LIB_DECI est impératif pour debugger avec OPT_DEBUG_VISUAL_FORM_OBJ_EVNT
  200.    end
  201.   endc
  202.  endc
  203.  
  204.  ifd MDL_WIND_WENU
  205. MDL_WIND_FORM_MENU
  206.  else
  207.   ifd MDL_WIND_FORM
  208. MDL_WIND_FORM_MENU
  209.   endc
  210.  endc
  211.  
  212. *--------------------------------------------------------------------------*
  213.  
  214.     opt o+,ow-
  215.  
  216.     include constant.s
  217.     include sys_def.s
  218.     include guw_def.s
  219.     include macros.s
  220.  
  221.     ifd MDL_GEM
  222.     include gemmacro.i
  223.     endc
  224.  
  225. *--------------------------------------------------------------------------*
  226. *--------------------------------------------------------------------------*
  227. *--------------------------------------------------------------------------*
  228. *---------------------       DEBUT CODE VISUAL        ---------------------*
  229. *--------------------------------------------------------------------------*
  230. *--------------------------------------------------------------------------*
  231. *--------------------------------------------------------------------------*
  232.  
  233. VISUAL40_START:
  234.     move.l a1,GWVA_APP_OBJ_PTR
  235.     moveq #0,d1
  236.     move.l a0,a5
  237.     move.l a5,d0
  238.     bne.s .acc
  239.     moveq #1,d1
  240.     move.l 4(a7),a5
  241.     move.l a5,GWVA_APP_OBJ_BASE_PAGE
  242. .acc:    move.w d1,GWVA_APP_OBJ_IS_ACC_PRG
  243.  
  244.     clr.w GWVA_APP_OBJ_CMD_LINE_SIZE    ; 0 si acc
  245.     lea GWVA_APP_OBJ_STACK,a7
  246.     tst d1
  247.     beq.s .pas_de_setblock_si_acc
  248.     move.l 12(a5),d0
  249.     add.l 20(a5),d0
  250.     add.l 28(a5),d0
  251.     add.l #$100,d0
  252.     and.l #-2,d0
  253.     addq.l #2,d0
  254.     move.l d0,-(sp)
  255.     move.l a5,-(sp)
  256.     clr.w -(sp)
  257.     appel dos,$4a,12
  258.     clr d1
  259.     add.b $80(a5),d1
  260.     move.w d1,GWVA_APP_OBJ_CMD_LINE_SIZE
  261.     lea $81(a5),a5
  262.     move.l a5,GWVA_APP_OBJ_CMD_LINE_PTR
  263. .pas_de_setblock_si_acc:
  264.  
  265. *--------------------------------------------------------------------------*
  266.  
  267.     ifd MDL_GEM
  268.  
  269.     appl_init
  270.     tst d0
  271.     bmi GWVA_APPL_INIT_FAILED
  272.  
  273.     graf_handle
  274.     move.w d0,current_handle        ; Desktop's VDI handle
  275.  
  276.     bsr GWVA_APP_OBJ_PRG_INFO_VDI_WORKSTATION
  277.  
  278.     tst GWVA_APP_OBJ_IS_ACC_PRG
  279.     beq.s .jump_vdi_inits_if_acc
  280.  
  281.     bsr GWVA_APP_OBJ_PRG_OPEN_VSTATION
  282.     tst d7
  283.     bmi GWVA_OPEN_WORKSTATION_FAILED
  284.  
  285. .jump_vdi_inits_if_acc:
  286.     endc
  287.  
  288.     SUPEXEC GWVA_APP_OBJ_SEARCH_SYSTEM_COOKIES    ; tos+sélectrix+copro+Mint
  289.  
  290.     ifd MDL_GEM
  291.  
  292.     move.l GWVA_APP_OBJ_PTR,a0
  293.     tst.l GWVA_APP_OBJ_RSC_INFO(a0)
  294.     beq .pas_de_ressource
  295.  
  296.     move.l GWVA_APP_OBJ_RSC_INFO(a0),a1
  297.     btst #GWVA_APP_BIT_RSC_MULTI_RES,GWVA_APP_OBJ_FLAGS(a0)
  298.     beq.s .un_seul_ressource
  299.  
  300.     moveq #1,d1        ; est-on dans une résolution avec palette ?
  301.     move.w GWVA_APP_OBJ_VDI_WORKSTATION_EXTD+4*2,d2
  302.     lsl.w d2,d1
  303.     move.w GWVA_APP_OBJ_VDI_WORKSTATION+13*2,d3
  304.     cmp.w d3,d1
  305.     beq.s .resolution_palette
  306.     move.w #-1,d1    ; pas de palette
  307. .resolution_palette
  308.     cmp.w #2,d1
  309.     beq.s .color_2
  310.     lea 4(a1),a1
  311.     cmp.w #4,d1
  312.     beq.s .color_4
  313.     lea 4(a1),a1
  314.     cmp.w #16,d1
  315.     beq.s .color_16
  316.     lea 4(a1),a1
  317.     cmp.w #256,d1
  318.     beq.s .color_256
  319.     lea 4(a1),a1
  320. .color_2:
  321. .color_4:
  322. .color_16:
  323. .color_256:
  324.     move.l (a1),a1
  325.     cmp.l #0,a1
  326.     beq.s .rsc_fail
  327.  
  328. .un_seul_ressource:
  329.  
  330.     btst #GWVA_APP_BIT_RSC_IN_MEM,GWVA_APP_OBJ_FLAGS(a0)
  331.     bne.s .in_memory
  332.  
  333.     rsrc_load a1
  334.     tst.w d0
  335.     bne.s .rsc_loaded_ok
  336.  
  337. .rsc_fail:    lea GWVA_ALERT_NO_RSC,a0
  338.     moveq #1,d0
  339.     bsr ALERT_BOX
  340.  
  341.     ifd MDL_EVENTS
  342.  
  343.     tst GWVA_APP_OBJ_IS_ACC_PRG
  344.     bne GWVA_APP_RSC_LOAD_FAILED
  345.     bra GWVA_INFINITE_LOOP
  346.     else
  347.  
  348.     bra GWVA_APP_RSC_LOAD_FAILED    ; si MDL_GEM sans MDL_EVENTS et erreur de ressource
  349.  
  350.     endc    ; MDL_EVENTS
  351.  
  352. .in_memory:
  353.     ifd MDL_RELOCATE_RSC
  354.     move.l a1,a0
  355.     bsr GWVA_RELOCATE_RSC
  356.     tst d7
  357.     bmi.s .rsc_fail
  358.     endc
  359.  
  360. .pas_de_ressource:
  361. .rsc_loaded_ok:
  362.  
  363.     ifd MDL_WIND_MENU
  364.     bsr GWVA_WIND_OBJ_PRG_MENU_FIX_OBJECT_ARROW
  365.     endc
  366.  
  367.     ifd MDL_MENU
  368.     move.l GWVA_APP_OBJ_PTR,a0
  369.     tst.l GWVA_APP_OBJ_MAIN_MENU_PTR(a0)
  370.     beq .pas_de_menu
  371.  
  372.     move.l GWVA_APP_OBJ_MAIN_MENU_PTR(a0),a1
  373.     move.w GWVA_MENU_STRUCT_INDEX(a1),d0
  374.     lea GWVA_MENU_STRUCT_PTR(a1),a0    ; ad. menu principal
  375.     save.l a1
  376.     bsr RETURN_TREE_OBJ_PTR
  377.     load.l a0
  378.  
  379.     tst GWVA_APP_OBJ_IS_ACC_PRG
  380.     beq .pas_de_menus_attaches_si_acc
  381.  
  382.     cmp.w #$330,_AESversion+global
  383.     blt .pas_de_menu_attache_aes_insuffisant
  384.  
  385.     tst.l GWVA_MENU_STRUCT_LIST_ATTACH_PTR(a0)
  386.     beq.s .pas_de_sous_menu
  387.  
  388.     move.l GWVA_MENU_STRUCT_LIST_ATTACH_PTR(a0),a0
  389.  
  390. .loop_ss_mn:tst.l (a0)
  391.     move.l (a0),a1
  392.     beq.s .fin_liste_ss_menu
  393.  
  394.     move GWVA_SUB_MENU_TREE(a1),d0
  395.     clr d1
  396.     save.l a0-a1
  397.     bsr RETURN_OBJ_IN_FORM_OBJ_PTR
  398.     move.l a1,a3
  399.     movem.l (sp),a0-a1
  400.  
  401.     lea GWVA_APP_OBJ_TMP_MENU_OBJ,a2
  402.     move.l a3,mn_tree(a2)
  403.     move.w GWVA_SUB_MENU_INDEX(a1),mn_menu(a2)
  404.     move.w GWVA_SUB_MENU_WHICH_ALIGN(a1),mn_item(a2)
  405.     move.w GWVA_SUB_MENU_SCROLL(a1),mn_scroll(a2)
  406.     move.w #0,mn_keystate(a2)
  407.  
  408.     move GWVA_SUB_MENU_TREE_OBJ_ATTACHED(a1),d0
  409.     clr d1
  410.     bsr RETURN_OBJ_IN_FORM_OBJ_PTR
  411.     move.l a1,a2
  412.     movem.l (sp),a0-a1
  413.  
  414.     menu_attach #1,a2,GWVA_SUB_MENU_OBJ_IDX_ATTACHED(a1),#GWVA_APP_OBJ_TMP_MENU_OBJ
  415.     load.l a0-a1
  416.  
  417.     lea 4(a0),a0
  418.     bra.s .loop_ss_mn
  419.  
  420. .fin_liste_ss_menu:
  421. .pas_de_sous_menu:
  422. .pas_de_menu_attache_aes_insuffisant:
  423. .pas_de_menus_attaches_si_acc:
  424. .pas_de_menu:
  425.     endc        ; ifd MDL_MENU
  426.  
  427.     ifd MDL_WIND
  428.     move #GWVA_APP_OBJ_MAX_NUMBER_WIND-1,d0
  429.     lea GWVA_APP_OBJ_WIND_LIST,a0
  430. .clr_list:    clr.l (a0)+
  431.     dbf d0,.clr_list
  432.     endc
  433.  
  434.     endc        ; ifd MDL_GEM
  435.  
  436.     FSETDTA GWVA_APP_OBJ_DTA
  437.  
  438.     lea GWVA_APP_OBJ_STARTED_PATH,a0
  439.     bsr GWVA_APP_OBJ_STORE_CURRENT_PATH
  440.  
  441. *--------------------------------------------------------------------------*
  442.     clr.w GWVA_APP_OBJ_RETURN_CODE
  443.     move.l (GWVA_APP_OBJ_CUSTOM_INITS,[GWVA_APP_OBJ_PTR.l]),a1
  444.     cmp.l #0,a1
  445.     beq.s .pas_custom_inits
  446.     move GWVA_APP_OBJ_CMD_LINE_SIZE,d0
  447.     move.l GWVA_APP_OBJ_CMD_LINE_PTR,a0
  448.     jsr (a1)
  449. .pas_custom_inits:
  450. *--------------------------------------------------------------------------*
  451.  
  452.     ifd MDL_GEM
  453.  
  454.     ifd MDL_EVENTS
  455.  
  456.     tst GWVA_APP_OBJ_IS_ACC_PRG
  457.     bne.s .no_menu_register_if_prg
  458.  
  459. **** inits ACC
  460.  
  461.     menu_register global+_AESapid,<(GWVA_APP_OBJ_ACC_NAME,[GWVA_APP_OBJ_PTR.l])>
  462.     move d0,GWVA_APP_OBJ_ACC_NUMBER
  463.     bmi GWVA_INFINITE_LOOP
  464.  
  465.     menu_register #-1,<(GWVA_APP_OBJ_REG_NAME,[GWVA_APP_OBJ_PTR.l])>
  466.  
  467.     bra .saute_prg_inits_if_acc
  468.  
  469. .no_menu_register_if_prg:
  470.  
  471.     endc    ; MDL_EVENTS
  472.  
  473.     cmp #1,global+_AESnumapps
  474.     beq.s .no_mint
  475.  
  476. **** inits MiNT
  477.  
  478.     menu_register global+_AESapid,<(GWVA_APP_OBJ_ACC_NAME,[GWVA_APP_OBJ_PTR.l])>
  479.     shel_write #9,#1,#0,#0,#0    ; reçoit les messages MiNT
  480.  
  481. **** inits PRG
  482.  
  483. .no_mint:    menu_register #-1,<(GWVA_APP_OBJ_REG_NAME,[GWVA_APP_OBJ_PTR.l])>
  484.  
  485.     move.l GWVA_APP_OBJ_PTR,a0
  486.     btst #GWVA_APP_BIT_BACKGROUND,GWVA_APP_OBJ_FLAGS(a0)
  487.     beq .pas_de_background
  488.  
  489.     move.l GWVA_APP_OBJ_BACKGROUND_WIND_PTR(a0),a0
  490.     cmp.w #GWVA_WIND_TYPE_FORM,GWVA_WIND_OBJ_TYPE(a0)
  491.     bne .other_than_form_not_supported
  492.  
  493.     move.w ([GWVA_WIND_OBJ_SPEC_PTR,a0],GWVA_WFORM_OBJ_FORM_IDX),d0
  494.     bsr RETURN_FORM_OBJ_SCULPTURE
  495.  
  496.     move.l GWVA_APP_OBJ_DESKTOP_X,ob_x(a0)
  497.     add.w d0,ob_x(a0)
  498.     add.w d1,ob_y(a0)
  499.     move.l GWVA_APP_OBJ_DESKTOP_W,ob_width(a0)
  500.     sub.w d0,ob_width(a0)
  501.     sub.w d2,ob_width(a0)
  502.     sub.w d1,ob_height(a0)
  503.     sub.w d3,ob_height(a0)    ; on etend la taille de l'objet 0 à la taille du bureau
  504.  
  505.     save.l a0
  506.     move.l GWVA_APP_OBJ_PTR,a0
  507.     btst #GWVA_APP_BIT_BACKGROUND_CENTER,GWVA_APP_OBJ_FLAGS(a0)
  508.     beq.s .pas_centre_auto
  509.  
  510.     move.l GWVA_APP_OBJ_BACKGROUND_WIND_PTR(a0),a0
  511.     move.w ([GWVA_WIND_OBJ_SPEC_PTR,a0],GWVA_WFORM_OBJ_FORM_IDX),d0
  512.     move #1,d1
  513.     bsr RETURN_OBJ_IN_FORM_OBJ_PTR
  514.     move.w GWVA_APP_OBJ_DESKTOP_W,d0
  515.     sub.w ob_width(a1),d0
  516.     bmi.s .no_x
  517.     asr.w #1,d0
  518.     add.w GWVA_APP_OBJ_DESKTOP_X,d0
  519.     bmi.s .no_x
  520.     move d0,ob_x(a1)
  521. .no_x:    move.w GWVA_APP_OBJ_DESKTOP_H,d0
  522.     sub.w ob_height(a1),d0
  523.     bmi.s .no_y
  524.     asr.w #1,d0
  525.     add.w GWVA_APP_OBJ_DESKTOP_Y,d0
  526.     bmi.s .no_y
  527.     move d0,ob_y(a1)
  528. .no_y:
  529.  
  530. .pas_centre_auto:
  531.     load.l a0
  532.  
  533.     move.l a0,int_in+2*2
  534.     clr.w int_in+4*2    ; Numéro du 1er objet à redessiner
  535.     wind_set #0,#WF_NEWDESK
  536.  
  537.     ; pour forcer le redraw du fond du bureau
  538.     form_dial #3,#0,#0,#0,#0,GWVA_APP_OBJ_DESKTOP_X,GWVA_APP_OBJ_DESKTOP_Y,GWVA_APP_OBJ_DESKTOP_W,GWVA_APP_OBJ_DESKTOP_H
  539.  
  540. .other_than_form_not_supported:
  541. .pas_de_background:
  542.  
  543.     ifd MDL_MENU
  544.  
  545.     move.l GWVA_APP_OBJ_PTR,a0
  546.     
  547.     btst #GWVA_APP_BIT_MENU,GWVA_APP_OBJ_FLAGS(a0)
  548.     beq .pas_de_menu2
  549.     ; Le ptr sur le menu principal a été calculé inconditionnellement au début
  550.     ; du VA. On ne fait aucun teste ici.
  551.     ; On a donc des bombes si le BIT_MENU est positioné et le MAIN_MENU_PTR est bidon
  552.     move.l GWVA_APP_OBJ_MAIN_MENU_PTR(a0),a1
  553.     move.l GWVA_MENU_STRUCT_PTR(a1),a0
  554.     bsr GWVA_SHOW_MENU
  555. .pas_de_menu2:
  556.  
  557.     endc
  558.  
  559. .saute_prg_inits_if_acc:
  560.  
  561.     endc            ; ifd MDL_GEM
  562.  
  563. *--------------------------------------------------------------------------*
  564. *--------------------------------------------------------------------------*
  565. *--------------------------------------------------------------------------*
  566. *------------------    CODE SPECIFIQUE AUX EVENEMENTS   -------------------*
  567. *--------------------------------------------------------------------------*
  568. *--------------------------------------------------------------------------*
  569. *--------------------------------------------------------------------------*
  570.  
  571.     ifd MDL_EVENTS
  572.  
  573.     clr.w GWVA_APP_OBJ_EVENT_BITS
  574.  
  575. GWVA_MAIN_EVENTS_LOOP:
  576.     tst.w GWVA_APP_OBJ_EVENT_BITS
  577.     bne .old_evnt_waiting
  578.  
  579.     move.l GWVA_APP_OBJ_PTR,a0
  580.  
  581.     clr d0
  582.  
  583.     bset #EVNT_KEYBD,d0
  584.  
  585.     ifd MDL_WIND
  586.     bset #EVNT_BUTTON,d0
  587.     else
  588.     tst.l GWVA_APP_OBJ_EVNT_BUTTON(a0)
  589.     beq.s .pas_evnt_button
  590.     bset #EVNT_BUTTON,d0
  591. .pas_evnt_button:
  592.     endc
  593.  
  594.     tst.l GWVA_APP_OBJ_EVNT_MOUSE1(a0)
  595.     beq.s .pas_evnt_mouse1
  596.     tst.l GWVA_APP_OBJ_M1W(a0)
  597.     beq.s .pas_evnt_mouse1
  598.     bset #EVNT_MOUSE1,d0
  599. .pas_evnt_mouse1:
  600.     tst.l GWVA_APP_OBJ_EVNT_MOUSE2(a0)
  601.     beq.s .pas_evnt_mouse2
  602.     tst.l GWVA_APP_OBJ_M2W(a0)
  603.     beq.s .pas_evnt_mouse2
  604.     bset #EVNT_MOUSE2,d0
  605. .pas_evnt_mouse2:
  606.  
  607.     bset #EVNT_MESAG,d0
  608.  
  609.     tst.l GWVA_APP_OBJ_EVNT_TIMER(a0)
  610.     beq.s .pas_evnt_timer
  611.     tst.l GWVA_APP_OBJ_COUNT(a0)
  612.     beq.s .pas_evnt_timer
  613.     bset #EVNT_TIMER,d0
  614. .pas_evnt_timer:
  615.  
  616.     move.w d0,GWVA_APP_OBJ_EVENT_BITS
  617.  
  618.     ; #2,#3,#3
  619.     evnt_multi d0,
  620. &    #$102,#$3,#$0,
  621. &    GWVA_APP_OBJ_M1FLAG(a0),GWVA_APP_OBJ_M1X(a0),GWVA_APP_OBJ_M1Y(a0),GWVA_APP_OBJ_M1W(a0),GWVA_APP_OBJ_M1H(a0),
  622. &    GWVA_APP_OBJ_M2FLAG(a0),GWVA_APP_OBJ_M2X(a0),GWVA_APP_OBJ_M2Y(a0),GWVA_APP_OBJ_M2W(a0),GWVA_APP_OBJ_M2H(a0),
  623. &    #GWVA_APP_OBJ_MSG_BUF,
  624. &    GWVA_APP_OBJ_COUNT(a0)
  625.  
  626.     move.w d0,GWVA_APP_OBJ_EVENT_BITS
  627.  
  628.     move.l int_out+2,GWVA_APP_OBJ_EVNT_MULTI_MX
  629.     move.l int_out+6,GWVA_APP_OBJ_EVNT_MULTI_MB
  630.     move.l int_out+10,GWVA_APP_OBJ_EVNT_MULTI_KC
  631.  
  632. .old_evnt_waiting:
  633.     move.w GWVA_APP_OBJ_EVENT_BITS,d0
  634.  
  635. ; L'evnt_mesag doit etre traité en premier car il peut informer d'un changement systeme
  636. ; dont il faut que les routines suivantes soient averties.
  637.  
  638.     btst #EVNT_MESAG,d0
  639.     bne GWVA_APP_OBJ_PRG_EVNT_MESSAGE    ; its_a_message
  640.  
  641.     btst #EVNT_TIMER,d0
  642.     bne.s GWVA_APP_OBJ_PRG_EVNT_TIMER    ; its_a_timer
  643.  
  644.     btst #EVNT_BUTTON,d0
  645.     bne GWVA_APP_OBJ_PRG_EVNT_BUTTON    ; its_a_button
  646.  
  647.     btst #EVNT_MOUSE1,d0
  648.     bne GWVA_APP_OBJ_PRG_EVNT_MOUSE1
  649.  
  650.     btst #EVNT_MOUSE2,d0
  651.     bne GWVA_APP_OBJ_PRG_EVNT_MOUSE2
  652.  
  653.     btst #EVNT_KEYBD,d0    ; doit être après le button : car on transforme un evnt_keyb en evnt_but
  654.     bne.s GWVA_APP_OBJ_PRG_EVNT_KEYBOARD    ; its_a_key
  655.  
  656.     illegal
  657.  
  658. *--------------------------------------------------------------------------*
  659. GWVA_APP_OBJ_PRG_EVNT_TIMER:
  660.     move #EVNT_TIMER,d7
  661.     bsr GWVA_APP_OBJ_PRG_CLEAR_EVNT_BIT
  662.  
  663.     move.l GWVA_APP_OBJ_PTR,a0
  664.     tst.l GWVA_APP_OBJ_EVNT_TIMER(a0)
  665.     beq GWVA_MAIN_EVENTS_LOOP
  666.  
  667.     jsr ([GWVA_APP_OBJ_EVNT_TIMER,a0])
  668.  
  669.     bra GWVA_MAIN_EVENTS_LOOP
  670.  
  671. *--------------------------------------------------------------------------*
  672. GWVA_APP_OBJ_PRG_EVNT_KEYBOARD:
  673.     move #EVNT_KEYBD,d7
  674.     bsr GWVA_APP_OBJ_PRG_CLEAR_EVNT_BIT
  675.  
  676.     ifd MDL_MENU
  677.  
  678.     move.l GWVA_APP_OBJ_PTR,a0
  679.  
  680.     btst #GWVA_APP_BIT_MENU,GWVA_APP_OBJ_FLAGS(a0)
  681.     beq.s .no_menu
  682.  
  683.     move.l GWVA_APP_OBJ_MAIN_MENU_PTR(a0),a0
  684.     move GWVA_APP_OBJ_EVNT_MULTI_KC,d0
  685.     move.w #GWVA_MENU_SHORCUT_STRUCT_LENGTH,d1
  686.     bsr GWVA_EXEC_MENU_ROUTINE_FROM_KC
  687.     tst d7
  688.     beq GWVA_MAIN_EVENTS_LOOP
  689.  
  690. .no_menu:
  691.     endc
  692.  
  693.     ifd MDL_WIND
  694.  
  695.     bsr GWVA_WIND_OBJ_PRG_RETURN_TOP_WINDOW
  696.     tst d7
  697.     bmi .the_top_windows_is_not_mine
  698.  
  699. ; Une window namifiée puis iconifiée peut recevoir des evenements si son contenu s'y prète
  700.  
  701.     btst #GWVA_WIN_BIT_ICON,GWVA_WIND_OBJ_STATUS+1(a0)    ; iconifiée ?
  702.     beq.s .window_not_inconified
  703.     move.l GWVA_WIND_OBJ_ICON_WIND_PTR(a0),a0    ; ptr sur la structure de la fenetre iconifiée
  704. .window_not_inconified:
  705.  
  706.     btst #GWVA_WIN_BIT_NAMIFIED,GWVA_WIND_OBJ_STATUS+1(a0)
  707.     bne .window_namified
  708.  
  709.     ifd MDL_WIND_FORM
  710.  
  711. ; Il est necessaire de mettre a jour (position...) le formulaire et la toolbar
  712. ; éventuels. Bien que ce ne soit pas necessaire dans le cas d'une touche de
  713. ; déplacement pour les fenetres textes et bitmap, on place l'appel à cet endroit
  714. ; pour plus de maintenabilité.
  715.  
  716.     bsr GWVA_WIND_OBJ_PRG_UPDATE_TOOLB_AND_FORM_POS    ; Mise à jour de la fenetre qui a recu la touche
  717.  
  718.     endc
  719.  
  720.     ifd MDL_WIND_MENU
  721.  
  722.     btst #GWVA_WIN_BIT_AMENU,GWVA_WIND_OBJ_PROPERTIES+1(a0)
  723.     beq .no_wind_menu
  724.  
  725.     save.l a0
  726.     move.l GWVA_WIND_OBJ_MENU_SPEC_PTR(a0),a0
  727.     move GWVA_APP_OBJ_EVNT_MULTI_KC,d0
  728.     move.w #GWVA_MENU_SHORCUT_STRUCT_LENGTH,d1
  729.     bsr GWVA_EXEC_MENU_ROUTINE_FROM_KC
  730.     load.l a0
  731.     tst d7
  732.     beq GWVA_MAIN_EVENTS_LOOP
  733.  
  734. .no_wind_menu:
  735.     endc
  736.  
  737.     tst.l GWVA_WIND_OBJ_KEY_TABLE(a0)
  738.     beq.s .pas_de_table_de_touches
  739.     save.l a0
  740.     move.l GWVA_WIND_OBJ_KEY_TABLE(a0),a0
  741.     move GWVA_APP_OBJ_EVNT_MULTI_KC,d0
  742.     move #GWVA_WIND_KEY_STRUCT_LENGTH,d1
  743.     bsr GWVA_CONVERT_KC_IN_OBJECT_IDX
  744.     move.l a0,a1
  745.     load.l a0
  746.     tst d7
  747.     bmi.s .pas_trouve_dans_la_table
  748.     move GWVA_APP_OBJ_EVNT_MULTI_KC,d0
  749.     move GWVA_APP_OBJ_EVNT_MULTI_KS,d1
  750.     move GWVA_WIND_OBJ_KEYTABLE_TYPE(a1),d2
  751.     tst.l GWVA_WIND_OBJ_KEYTABLE_PTR(a1)
  752.     beq.s .no_jump
  753.     jsr ([GWVA_WIND_OBJ_KEYTABLE_PTR,a1])
  754. .no_jump:    bra GWVA_MAIN_EVENTS_LOOP
  755. .pas_trouve_dans_la_table:
  756. .pas_de_table_de_touches:
  757.  
  758.     ; flèches -> wind_arrowed
  759.  
  760.     cmp.w #GWVA_WIND_TYPE_TEXT,GWVA_WIND_OBJ_TYPE(a0)
  761.     beq.s .window_texte
  762.  
  763.     cmp.w #GWVA_WIND_TYPE_BITMAP,GWVA_WIND_OBJ_TYPE(a0)
  764.     bne.s .pas_window_bitmap
  765.  
  766. .window_texte:
  767.     bftst GWVA_WIND_OBJ_FLAGS(a0){15-11:6}
  768.     beq.s .got_no_slide_arrow
  769.  
  770.     move GWVA_APP_OBJ_EVNT_MULTI_KC,d1
  771.  
  772.     lea GWVA_WTEXT_OBJ_SHORTCUTS,a1
  773. .search2:    tst.l (a1)
  774.     bmi.s .no_window_shortcut
  775.     move.w (a1),d2        ; shortcut
  776.     cmp.w d2,d1
  777.     beq.s .window_key
  778.     add.w #2+2,a1
  779.     bra.s .search2
  780.  
  781. .window_key:lea GWVA_APP_OBJ_MSG_EXT_BUF,a2
  782.     move.w #WM_ARROWED,(a2)+    ; type de message
  783.     move.w global+_AESapid,(a2)+
  784.     clr.w (a2)+
  785.     move.w GWVA_WIND_OBJ_GEM_HANDLE(a0),(a2)+
  786.     move.w 2(a1),(a2)+        ; type de déplacement
  787.     appl_write global+_AESapid,#16,#GWVA_APP_OBJ_MSG_EXT_BUF
  788.  
  789.     bra GWVA_MAIN_EVENTS_LOOP
  790.  
  791. .no_window_shortcut:
  792. .got_no_slide_arrow:
  793. .pas_window_bitmap:
  794.  
  795.     ifd MDL_WIND_FORM
  796.  
  797.     cmp.w #GWVA_WIND_TYPE_FORM,GWVA_WIND_OBJ_TYPE(a0)
  798.     bne .pas_window_formulaire
  799.  
  800.     move.l GWVA_WIND_OBJ_SPEC_PTR(a0),a1
  801.  
  802.     ; recherche d'un éventuel shortcut <-> click sur bouton
  803.     save.l a0-a1
  804.     lea GWVA_WFORM_OBJ_START_OBJ_LIST(a1),a0
  805.     move GWVA_APP_OBJ_EVNT_MULTI_KC,d0
  806.     move.w #2+1+1+2+4,d1
  807.     bsr GWVA_CONVERT_KC_IN_OBJECT_IDX
  808.     load.l a0-a1
  809.     tst d7
  810.     bmi.s .pas_trouve_shortcut
  811.  
  812.     ; le traitement du bouton default peut se brancher ici
  813. .transform_a_keyb_evnt_into_a_click_evnt:
  814.  
  815.     save.l a0-a1
  816.     objc_offset GWVA_WFORM_OBJ_FORM_PTR(a1),d0
  817.     load.l a0-a1
  818.  
  819.     move.l int_out+2,GWVA_APP_OBJ_EVNT_MULTI_MX
  820.  
  821.     move.w #1,GWVA_APP_OBJ_EVNT_MULTI_MB    ; bton gauche
  822.     move.w #1,GWVA_APP_OBJ_EVNT_MULTI_MC    ; 1 click
  823.  
  824.     bra GWVA_APP_OBJ_PRG_EVNT_BUTTON
  825.  
  826. .pas_trouve_shortcut:
  827.     tst GWVA_WIND_OBJ_FOCUSED_OBJECT(a0)
  828.     bpl .there_s_editable_texte
  829.  
  830.     save.l a0/a1
  831.     form_keybd GWVA_WFORM_OBJ_FORM_PTR(a1),#0,#1,GWVA_APP_OBJ_EVNT_MULTI_KC
  832.     load.l a0/a1
  833.  
  834.     tst d0    ; 0 = bouton 'exit' default, 1 = pas de bouton en 'default'
  835.     bne.s .pas_objet_defaut_active
  836.  
  837.     ; on peut se rebrancher ici apres un 'enter' dans un champs de texte editable
  838. .objet_defaut_active:
  839.  
  840.     move.w int_out+1*2,d0    ; default object
  841.     move.w d0,d1
  842.     mulu #L_OBJECT,d1
  843.     add.l GWVA_WFORM_OBJ_FORM_PTR(a1),d1
  844.     move.l d1,a2
  845.  
  846.     bclr #SELECTED,ob_state+1(a2)    ; désélection de l'objet
  847.  
  848.     btst #DISABLED,ob_state+1(a2)    ; objet 'default' disable ? -> on doit le réafficher deselectionner ?_PATCH_?
  849.     bne.s .objet_defaut_active_but_disable
  850.  
  851.     btst #SELECTABLE,ob_flags+1(a2)    ; objet 'default' pas selectable ? -> on doit le réafficher deselectionner ?_PATCH_?
  852.     beq.s .objet_defaut_active_but_not_selectable
  853.  
  854.     ; pas de redessin si le bouton 'default' est selectable et pas disable ->
  855.     ; la routine de clic souris s'en chargera mieux que nous ...
  856.  
  857.     bra .transform_a_keyb_evnt_into_a_click_evnt
  858.  
  859. .objet_defaut_active_but_not_selectable:
  860. .objet_defaut_active_but_disable:
  861.  
  862.     ; il faut faire un redessin car le gem sur un form_keyb
  863.     ; et un 'enter' va enfoncer meme un objet disable
  864.     ; et la routine click, elle, plus intelligente ne le fera pas
  865.     save.l d0/a0-a1
  866.     move.w #1,d1
  867.     clr d2
  868.     bsr GWVA_FORM_WIND_OBJ_PRG_REDRAW_PART
  869.     load.l d0/a0-a1
  870.  
  871.     bra .transform_a_keyb_evnt_into_a_click_evnt
  872.  
  873. .touche_intraitable:
  874. .pas_objet_defaut_active:
  875.     bra .end_evnt_keyboard
  876.  
  877. .there_s_editable_texte:
  878.     cmp.w #$0f09,GWVA_APP_OBJ_EVNT_MULTI_KC    ; Tab ?
  879.     bne.s .pas_tab
  880.     move GWVA_APP_OBJ_EVNT_MULTI_KS,d0
  881.     and.w #%11,d0
  882.     beq.s .pas_shift_tab            ; Shift+Tab ?
  883.     move.w #$4800,GWVA_APP_OBJ_EVNT_MULTI_KC    ; oui,alors on remplace la touche par un appui sur la fleche haut
  884.     clr.w GWVA_APP_OBJ_EVNT_MULTI_KS
  885. .pas_shift_tab:
  886. .pas_tab:
  887.     save.l a0/a1
  888.     form_keybd GWVA_WFORM_OBJ_FORM_PTR(a1),GWVA_WIND_OBJ_FOCUSED_OBJECT(a0),#1,GWVA_APP_OBJ_EVNT_MULTI_KC
  889.     load.l a0/a1
  890.  
  891.     tst d0    ; 0 = bouton 'exit' default, 1 = pas de bouton en 'default'
  892.     beq .objet_defaut_active
  893.  
  894.     tst int_out+2*2    ; a-t-il réussi à la traiter ?
  895.     bne .fkbd_pas_pu_traiter_touche
  896.  
  897.     move int_out+1*2,d0    ; int_out+2 = new obj
  898.  
  899.     ; Patch pour le GEM qui renvoie new_obj =0 si pressé enter
  900.     ; et pas de bouton default
  901.     move d0,d1
  902.     mulu #L_OBJECT,d1
  903.     add.l GWVA_WFORM_OBJ_FORM_PTR(a1),d1
  904.     move.l d1,a2
  905.     btst #EDITABLE,ob_flags+1(a2)    ; éditable ?
  906.     beq .next_obj_pas_editable
  907.  
  908.     save.l d0/a0/a1
  909.  
  910.     v_hide_c
  911.  
  912.     ifnd PATCH_WIND_FORM_CUSTOM_EDITABLE_TEXT
  913.     objc_edit GWVA_WFORM_OBJ_FORM_PTR(a1),GWVA_WIND_OBJ_FOCUSED_OBJECT(a0),#0,GWVA_WIND_OBJ_FOCUSED_OBJ_CURSOR_POS(a0),#3
  914.     else
  915.     move.w GWVA_WIND_OBJ_FOCUSED_OBJECT(a0),d0
  916.     move.w #0,d1
  917.     move.w GWVA_WIND_OBJ_FOCUSED_OBJ_CURSOR_POS(a0),d2
  918.     move.w #3,d3
  919.     move.l GWVA_WFORM_OBJ_FORM_PTR(a1),a0
  920.     bsr GWVA_WFORM_OBJ_PRG_OBJC_EDIT
  921.     endc
  922.  
  923.     movem.l (sp),d0/a0/a1
  924.  
  925.     cmp.w GWVA_WIND_OBJ_FOCUSED_OBJECT(a0),d0
  926.     beq.s .no_lost_focus_cause_no_change_objet
  927.     move.w GWVA_WIND_OBJ_FOCUSED_OBJECT(a0),d0
  928.     move #GWVA_EVNT_LOSTFOCUS,d7
  929.     lea GWVA_WFORM_OBJ_START_OBJ_LIST(a1),a2
  930.     bsr GWVA_WIND_OBJ_PRG_SEARCH_EVNT
  931.  
  932.     movem.l (sp),d0/a0/a1
  933.  
  934. .no_lost_focus_cause_no_change_objet:
  935.  
  936.     move.w GWVA_WIND_OBJ_FOCUSED_OBJECT(a0),-(sp)    ; on sauve avant d'écraser
  937.     move d0,GWVA_WIND_OBJ_FOCUSED_OBJECT(a0)
  938.  
  939.     ifnd PATCH_WIND_FORM_CUSTOM_EDITABLE_TEXT
  940.     objc_edit GWVA_WFORM_OBJ_FORM_PTR(a1),GWVA_WIND_OBJ_FOCUSED_OBJECT(a0),#0,GWVA_WIND_OBJ_FOCUSED_OBJ_CURSOR_POS(a0),#1
  941.     else
  942.     move.w GWVA_WIND_OBJ_FOCUSED_OBJECT(a0),d0
  943.     move.w #0,d1
  944.     move.w GWVA_WIND_OBJ_FOCUSED_OBJ_CURSOR_POS(a0),d2
  945.     move.w #1,d3
  946.     move.l GWVA_WFORM_OBJ_FORM_PTR(a1),a0
  947.     bsr GWVA_WFORM_OBJ_PRG_OBJC_EDIT
  948.     endc
  949.  
  950.     move.w (sp)+,d1
  951.     movem.l (sp),d0/a0/a1
  952.     move int_out+1*2,GWVA_WIND_OBJ_FOCUSED_OBJ_CURSOR_POS(a0)
  953.  
  954.     cmp.w GWVA_WIND_OBJ_FOCUSED_OBJECT(a0),d1
  955.     beq.s .no_got_focus_cause_no_change_objet
  956.     ; d0 : objet gagnant le focus
  957.     move #GWVA_EVNT_GOTFOCUS,d7
  958.     lea GWVA_WFORM_OBJ_START_OBJ_LIST(a1),a2
  959.     bsr GWVA_WIND_OBJ_PRG_SEARCH_EVNT
  960. .no_got_focus_cause_no_change_objet:
  961.  
  962.     v_show_c #1
  963.  
  964.     load.l d0/a0/a1
  965.  
  966. .next_obj_pas_editable:
  967.     bra GWVA_MAIN_EVENTS_LOOP
  968.  
  969. .fkbd_pas_pu_traiter_touche:
  970.     save.l a0/a1
  971.     ifnd PATCH_WIND_FORM_CUSTOM_EDITABLE_TEXT
  972.     objc_edit GWVA_WFORM_OBJ_FORM_PTR(a1),GWVA_WIND_OBJ_FOCUSED_OBJECT(a0),int_out+4,GWVA_WIND_OBJ_FOCUSED_OBJ_CURSOR_POS(a0),#2
  973.     else
  974.     move.w GWVA_WIND_OBJ_FOCUSED_OBJECT(a0),d0
  975.     move.w int_out+2*2,d1
  976.     move.w GWVA_WIND_OBJ_FOCUSED_OBJ_CURSOR_POS(a0),d2
  977.     move.w #2,d3
  978.     move.l GWVA_WFORM_OBJ_FORM_PTR(a1),a0
  979.     bsr GWVA_WFORM_OBJ_PRG_OBJC_EDIT
  980.     endc
  981.     load.l a0/a1
  982.  
  983. ; BUG de l'AES : on ne sait pas si la touche a pu etre traité correctement par le champ
  984. ; éditable. Par exemple, si on essait de rentrer une lettre dans un champ decimal,
  985. ; on n'est pas averti par l'AES que l'opération est impossible.
  986. ; Par conséquent, on envoit des messages CHANGED alors que le champ texte n'a pas été
  987. ; modifié.
  988.  
  989.     tst d0
  990.     beq .touche_intraitable
  991.  
  992.     move.w int_out+1*2,GWVA_WIND_OBJ_FOCUSED_OBJ_CURSOR_POS(a0)
  993.  
  994.     cmp.w #$4b00,GWVA_APP_OBJ_EVNT_MULTI_KC
  995.     beq.s .fleche_gauche
  996.     cmp.w #$4d00,GWVA_APP_OBJ_EVNT_MULTI_KC
  997.     beq.s .fleche_droite
  998.  
  999.     save.l a0/a1
  1000.     move GWVA_WIND_OBJ_FOCUSED_OBJECT(a0),d0
  1001.     move #GWVA_EVNT_CHANGED,d7
  1002.     lea GWVA_WFORM_OBJ_START_OBJ_LIST(a1),a2
  1003.     bsr GWVA_WIND_OBJ_PRG_SEARCH_EVNT
  1004.     load.l a0/a1
  1005.  
  1006. .fleche_gauche:
  1007. .fleche_droite:
  1008.  
  1009.     bra GWVA_MAIN_EVENTS_LOOP
  1010.  
  1011. .end_evnt_keyboard:
  1012. .pas_window_formulaire:
  1013.  
  1014.     endc            ; ifd MDL_WIND_FORM
  1015.  
  1016.     bra.s .one_of_mine        ; pour retourner : a0=ptr sur struct fenêtre
  1017.  
  1018. .the_top_windows_is_not_mine:
  1019.  
  1020.     endc            ; ifd MDL_WIND
  1021.  
  1022.     move.l #0,a0
  1023. .one_of_mine:
  1024.  
  1025.     move.l GWVA_APP_OBJ_PTR,a1
  1026.     tst.l GWVA_APP_OBJ_EVNT_KEYBD(a1)
  1027.     beq GWVA_MAIN_EVENTS_LOOP
  1028.  
  1029.     move.w GWVA_APP_OBJ_EVNT_MULTI_KC,d0
  1030.     jsr ([GWVA_APP_OBJ_EVNT_KEYBD,a1])    ; d0=touche, a0=ptr fenêtre ou 0
  1031.  
  1032. .window_namified:
  1033.     bra GWVA_MAIN_EVENTS_LOOP
  1034.  
  1035. *--------------------------------------------------------------------------*
  1036.  
  1037.     ifd MDL_WIND_FORM
  1038.  
  1039. GWVA_WIND_OBJ_PRG_SEARCH_EVNT:    ; d0=No objet, d7=évènement, a2=ptr liste
  1040.  
  1041.     ifd OPT_DEBUG_VISUAL_FORM_OBJ_EVNT
  1042.  
  1043.     save.l d0-a6
  1044.  
  1045.     clr.l d0
  1046.     move GWVA_WIND_OBJ_GEM_HANDLE(a0),d0
  1047.     lea GWVA_FORM_DEBUG_EVNT_ALERT_WIND_NR,a1
  1048.     bsr.s .fill_3char_field_with_deci
  1049.  
  1050.     movem.l (sp),d0-a6
  1051.     clr.l d0
  1052.     move GWVA_WFORM_OBJ_FORM_IDX(a1),d0
  1053.     lea GWVA_FORM_DEBUG_EVNT_ALERT_FORM_NR,a1
  1054.     bsr.s .fill_3char_field_with_deci
  1055.  
  1056.     movem.l (sp),d0-a6
  1057.     and.l #$ffff,d0
  1058.     lea GWVA_FORM_DEBUG_EVNT_ALERT_OBJ_NR,a1
  1059.     bsr.s .fill_3char_field_with_deci
  1060.  
  1061.     movem.l (sp),d0-a6
  1062.     subq #1,d7
  1063.     mulu #GWVA_FORM_DEBUG_EVNT_TABLE_ETALON-GWVA_FORM_DEBUG_EVNT_TABLE,d7
  1064.     lea GWVA_FORM_DEBUG_EVNT_TABLE,a0
  1065.     add d7,a0    
  1066.     lea GWVA_FORM_DEBUG_EVNT_ALERT_MSG,a1
  1067.     COPY_STRING_0 a0,a1
  1068.     move.b #' ',-1(a1)
  1069.  
  1070.     lea GWVA_FORM_DEBUG_EVNT_ALERT,a0
  1071.     moveq #1,d0
  1072.     bsr ALERT_BOX
  1073.  
  1074.     load.l d0-a6
  1075.     bra.s .jump_this_sub_routine
  1076.  
  1077. .fill_3char_field_with_deci:
  1078.     move.w #'  ',(a1)
  1079.     move.b #' ',2(a1)
  1080.     bsr STOCK_DECI
  1081.     move.b #' ',-1(a1)
  1082.     rts
  1083.  
  1084. .jump_this_sub_routine:
  1085.  
  1086.     endc        ; ifd OPT_DEBUG_VISUAL_FORM_OBJ_EVNT
  1087.  
  1088. .find:    tst.w GWVA_WFORM_OBJ_DEF_OBJ_NUM(a2)
  1089.     bmi.s .fin_liste_obj
  1090.     cmp.w GWVA_WFORM_OBJ_DEF_OBJ_NUM(a2),d0
  1091.     beq.s .obj_found
  1092.     lea GWVA_WFORM_OBJFORMLIST_LENGTH(a2),a2
  1093.     bra.s .find
  1094. .fin_liste_obj:
  1095.     rts
  1096. .obj_found:    move.l GWVA_WFORM_OBJ_DEF_OBJ_PTR_STRUCT(a2),a3    ; ptr sur la structure de l'objet
  1097.     cmp.w #GWVA_FORM_WIND_OBJECT_TEXT,GWVA_WFORM_OBJ_DEF_OBJ_TYPE(a2)
  1098.     beq.s .champs_de_texte
  1099.     cmp.w #GWVA_FORM_WIND_OBJECT_BUTTON,GWVA_WFORM_OBJ_DEF_OBJ_TYPE(a2)
  1100.     beq.s .bouton
  1101.     ; le menu popup et le radio-bouton n'apparaissent pas ici car
  1102.     ; il n'y a qu'un seul type de message possible (changed)
  1103.     ; et il est compris dans la structure
  1104.     rts
  1105. .champs_de_texte:
  1106.     lea GWVA_FORM_TXT_OBJ_START_EVNT_LIST(a3),a4
  1107.     bra.s .commun
  1108. .bouton:    lea GWVA_FORM_BTON_OBJ_START_EVNT_LIST(a3),a4
  1109.  
  1110. .commun:
  1111. .find_evnt:    tst.w 0*2(a4)
  1112.     bmi.s .fin_liste_evnt
  1113.     cmp.w 0*2(a4),d7
  1114.     beq.s .evnt_found
  1115.     lea 2+4(a4),a4
  1116.     bra.s .find_evnt
  1117. .fin_liste_evnt:
  1118.     rts
  1119. .evnt_found:jsr ([2,a4])
  1120.     rts
  1121.     endc
  1122.  
  1123. *--------------------------------------------------------------------------*
  1124. GWVA_APP_OBJ_PRG_EVNT_BUTTON:
  1125.  
  1126.     move #EVNT_BUTTON,d7
  1127.     bsr GWVA_APP_OBJ_PRG_CLEAR_EVNT_BIT
  1128.  
  1129.     ; Ce code est ici car on peut avoir un MDL_EVENTS sans MDL_WIND
  1130.     wind_find GWVA_APP_OBJ_EVNT_MULTI_MX,GWVA_APP_OBJ_EVNT_MULTI_MY
  1131.     move d0,GWVA_APP_OBJ_TMP_WIND_HANDLE
  1132.     ; si on a un click et non un evnt_top c'est qu'elle est top !
  1133.     ; ce n'est pas vrai si sur un WIND_TOP on ne fait pas LE WIND_TOP
  1134.     ; demandé par le GEM ... on a alors un click dans la fenêtre derrière
  1135.  
  1136.     btst #0,GWVA_APP_OBJ_EVNT_MULTI_MB+1
  1137.     beq .its_not_left_button
  1138.  
  1139.     ifd MDL_WIND
  1140.  
  1141.     bsr GWVA_WIND_OBJ_PRG_RETURN_PTR_FROM_HANDLE
  1142.     tst d7
  1143.     bmi .pas_a_nous_la_fenetre
  1144.  
  1145.     btst #GWVA_WIN_BIT_ICON,GWVA_WIND_OBJ_STATUS+1(a0)    ; iconifiée ?
  1146.     beq.s .window_not_inconified
  1147.     move.l GWVA_WIND_OBJ_ICON_WIND_PTR(a0),a0    ; ptr sur la structure de la fenetre iconifiée
  1148. .window_not_inconified:
  1149.  
  1150.     ifd MDL_WIND_FORM
  1151.     bsr GWVA_WIND_OBJ_PRG_UPDATE_TOOLB_AND_FORM_POS
  1152.  
  1153.     ifd MDL_WIND_MENU
  1154.     ; est-ce le menu ?
  1155.  
  1156.     btst #GWVA_WIN_BIT_AMENU,GWVA_WIND_OBJ_PROPERTIES+1(a0)
  1157.     beq .no_menu
  1158.  
  1159.     save.l a0
  1160.     objc_find #GWVA_WIND_OBJ_MENU_TREE_ARROWS,#0,#2,GWVA_APP_OBJ_EVNT_MULTI_MX,GWVA_APP_OBJ_EVNT_MULTI_MY
  1161.     load.l a0
  1162.  
  1163.     tst.w d0
  1164.     bmi.s .not_in_arrow
  1165.  
  1166.     move.w d0,d1
  1167.     mulu #L_OBJECT,d1
  1168.     lea GWVA_WIND_OBJ_MENU_TREE_ARROWS,a1
  1169.     cmp.b #G_BOXCHAR,ob_type+1(a1,d1.l)        ; a-t-on cliqué dans une fléche
  1170.     beq GWVA_WIND_OBJ_PRG_MENU_ARROWS        ; et non dans la partie OUTLINED de l'objet père
  1171.  
  1172. .not_in_arrow:
  1173.     move.l GWVA_WIND_OBJ_MENU_SPEC_PTR(a0),a1
  1174.     save.l a0-a1
  1175.     objc_find GWVA_MENU_STRUCT_PTR(a1),#0,#7,GWVA_APP_OBJ_EVNT_MULTI_MX,GWVA_APP_OBJ_EVNT_MULTI_MY
  1176.     load.l a0-a1
  1177.  
  1178.     tst d0
  1179.     bmi.s .not_in_menu
  1180.  
  1181.     move.w d0,d1
  1182.     mulu #L_OBJECT,d1
  1183.     move.l GWVA_MENU_STRUCT_PTR(a1),a2
  1184.     cmp.b #G_TITLE,ob_type+1(a2,d1.l)
  1185.     bne.s .not_in_title
  1186.  
  1187.     btst #DISABLED,ob_state+1(a2,d1.l)
  1188.     bne .title_off
  1189.  
  1190.     bra GWVA_WIND_OBJ_PRG_MENU_BAR
  1191. .title_off:
  1192. .not_in_title:
  1193. .not_in_menu:
  1194. .no_menu:
  1195.     endc
  1196.  
  1197.     ifd MDL_WIND_TOOLBAR
  1198.     ; est-ce la toolbar ?
  1199.  
  1200.     tst.l GWVA_WIND_OBJ_FIRST_SON_PTR(a0)
  1201.     beq.s .no_toolbar
  1202.  
  1203.     btst #GWVA_WIN_BIT_HIDETREE,([GWVA_WIND_OBJ_FIRST_SON_PTR,a0],GWVA_WIND_OBJ_PROPERTIES+1)
  1204.     bne.s .toolbar_not_drawn
  1205.  
  1206.     move.l ([GWVA_WIND_OBJ_FIRST_SON_PTR,a0],GWVA_WIND_OBJ_SPEC_PTR),a1
  1207.  
  1208.     save.l a0-a1
  1209.     objc_find GWVA_WFORM_OBJ_FORM_PTR(a1),#0,#7,GWVA_APP_OBJ_EVNT_MULTI_MX,GWVA_APP_OBJ_EVNT_MULTI_MY
  1210.     load.l a0-a1
  1211.  
  1212.     tst d0
  1213.     bmi.s .not_in_toolbar
  1214.     move #1,d2            ; redraw toolbar
  1215.     bra.s .traite_click_formulaire
  1216.  
  1217. .not_in_toolbar:
  1218. .toolbar_not_drawn:
  1219. .no_toolbar:
  1220.     endc
  1221.  
  1222.     cmp.w #GWVA_WIND_TYPE_FORM,GWVA_WIND_OBJ_TYPE(a0)
  1223.     bne .pas_fenetre_formulaire
  1224.  
  1225.     move.l GWVA_WIND_OBJ_SPEC_PTR(a0),a1
  1226.  
  1227.     save.l a0-a1
  1228.     objc_find GWVA_WFORM_OBJ_FORM_PTR(a1),#0,#7,GWVA_APP_OBJ_EVNT_MULTI_MX,GWVA_APP_OBJ_EVNT_MULTI_MY
  1229.     load.l a0-a1
  1230.  
  1231.     tst d0
  1232.     bmi .pas_d_objet
  1233.  
  1234.     clr d2            ; redraw contents
  1235.  
  1236. .traite_click_formulaire:
  1237.     move.l GWVA_WFORM_OBJ_FORM_PTR(a1),a2
  1238.     move d0,d3
  1239.     mulu #L_OBJECT,d3
  1240.     add.l d3,a2
  1241.  
  1242.     ; on teste si je suis pas sélectable mais que mon père le serait
  1243.     ; et dans ce cas on fait comme si il avait cliqué dans mon père
  1244.  
  1245.     btst #SELECTABLE,ob_flags+1(a2)
  1246.     bne.s .je_suis_selectable
  1247.  
  1248.     save.l a0-a2/d0/d2
  1249.     move.l GWVA_WFORM_OBJ_FORM_PTR(a1),a0    ; +d0 num obj
  1250.     bsr GWVA_FIND_FATHER_OBJECT
  1251.     move d0,d1
  1252.     move.l a0,a3
  1253.     load.l a0-a2/d0/d2
  1254.     tst d7
  1255.     bmi.s .click_in_root
  1256.  
  1257.     btst #SELECTABLE,ob_flags+1(a3)
  1258.     beq.s .je_suis_pas_selectable
  1259.  
  1260.     move d1,d0
  1261.     move.l a3,a2    ; l'objet cliqué devient le père
  1262.  
  1263. .je_suis_pas_selectable:
  1264. .click_in_root:
  1265. .je_suis_selectable:
  1266.     move ob_state(a2),d3
  1267.     btst #DISABLED,d3
  1268.     bne .object_disabled
  1269.  
  1270.     btst #EDITABLE,ob_flags+1(a2)    ; éditable ? G_FTEXT G_FBOXTEXT
  1271.     beq .pas_texte_editable
  1272.  
  1273.     ; d0 : objet
  1274.     ; d2 : quoi redressiner
  1275.     ; d3 : état de l'objet avant modifs
  1276.     ; a0 : window
  1277.     ; a1 : ptr form struct
  1278.     ; a2 : ptr objet cliqué
  1279.     save.l d0/d2/d3/a0-a2
  1280.  
  1281.     v_hide_c
  1282.  
  1283.     movem.l (sp),d0/d2/d3/a0-a2
  1284.  
  1285.     ifnd PATCH_WIND_FORM_CUSTOM_EDITABLE_TEXT
  1286.     objc_edit GWVA_WFORM_OBJ_FORM_PTR(a1),GWVA_WIND_OBJ_FOCUSED_OBJECT(a0),#0,GWVA_WIND_OBJ_FOCUSED_OBJ_CURSOR_POS(a0),#3
  1287.     else
  1288.     move.w GWVA_WIND_OBJ_FOCUSED_OBJECT(a0),d0
  1289.     move.w #0,d1
  1290.     move.w GWVA_WIND_OBJ_FOCUSED_OBJ_CURSOR_POS(a0),d2
  1291.     move.w #3,d3
  1292.     move.l GWVA_WFORM_OBJ_FORM_PTR(a1),a0
  1293.     bsr GWVA_WFORM_OBJ_PRG_OBJC_EDIT
  1294.     endc
  1295.  
  1296.     movem.l (sp),d0/d2/d3/a0-a2
  1297.  
  1298.     cmp.w GWVA_WIND_OBJ_FOCUSED_OBJECT(a0),d0
  1299.     beq.s .no_lost_focus_cause_no_change_objet
  1300.     move.w GWVA_WIND_OBJ_FOCUSED_OBJECT(a0),d0
  1301.     move #GWVA_EVNT_LOSTFOCUS,d7
  1302.     lea GWVA_WFORM_OBJ_START_OBJ_LIST(a1),a2
  1303.     bsr GWVA_WIND_OBJ_PRG_SEARCH_EVNT
  1304.  
  1305.     movem.l (sp),d0/d2/d3/a0-a2
  1306.  
  1307. .no_lost_focus_cause_no_change_objet:
  1308.  
  1309.     move.w GWVA_WIND_OBJ_FOCUSED_OBJECT(a0),-(sp)    ; on sauve avant d'écraser
  1310.     move d0,GWVA_WIND_OBJ_FOCUSED_OBJECT(a0)
  1311.     ifnd PATCH_WIND_FORM_CUSTOM_EDITABLE_TEXT
  1312.     objc_edit GWVA_WFORM_OBJ_FORM_PTR(a1),GWVA_WIND_OBJ_FOCUSED_OBJECT(a0),#0,GWVA_WIND_OBJ_FOCUSED_OBJ_CURSOR_POS(a0),#1
  1313.     else
  1314.     move.w GWVA_WIND_OBJ_FOCUSED_OBJECT(a0),d0
  1315.     move.w #0,d1
  1316.     move.w GWVA_WIND_OBJ_FOCUSED_OBJ_CURSOR_POS(a0),d2
  1317.     move.w #1,d3
  1318.     move.l GWVA_WFORM_OBJ_FORM_PTR(a1),a0
  1319.     bsr GWVA_WFORM_OBJ_PRG_OBJC_EDIT
  1320.     endc
  1321.     move.w (sp)+,d1
  1322.  
  1323.     movem.l (sp),d0/d2/d3/a0-a2
  1324.  
  1325.     cmp.w GWVA_WIND_OBJ_FOCUSED_OBJECT(a0),d1
  1326.     beq.s .no_got_focus_cause_no_change_objet
  1327.     ; d0 : objet gagnant le focus
  1328.     move #GWVA_EVNT_GOTFOCUS,d7
  1329.     lea GWVA_WFORM_OBJ_START_OBJ_LIST(a1),a2
  1330.     bsr GWVA_WIND_OBJ_PRG_SEARCH_EVNT
  1331.  
  1332.     movem.l (sp),d0/d2/d3/a0-a2
  1333. .no_got_focus_cause_no_change_objet:
  1334.  
  1335.     move.w int_out+2,GWVA_WIND_OBJ_FOCUSED_OBJ_CURSOR_POS(a0)
  1336.  
  1337.     v_show_c #1
  1338.     load.l d0/d2/d3/a0-a2
  1339.  
  1340. .pas_texte_editable:
  1341.     save.l d0/d2/d3/a0-a2
  1342.     form_button GWVA_WFORM_OBJ_FORM_PTR(a1),d0,GWVA_APP_OBJ_EVNT_MULTI_MC
  1343.     move d0,d1
  1344.     move.w int_out+2,d4    ; *newobject : index de l'objet s'il est
  1345.             ; éditable ou exit (bit 15 mis si double clic et touche-exit)
  1346.     load.l d0/d2/d3/a0-a2
  1347.  
  1348.     ; il retourne un zéro si
  1349.     ; bouton est exit avec le click relaché dans le bouton
  1350.     ; bouton est touch_exit qqs la position de la souris au relachement
  1351.  
  1352.     tst d1
  1353.     bne.s .propriete_exit_non_activee
  1354.  
  1355.     ; conditions de redessin ...
  1356.  
  1357.     btst #RBUTTON,ob_flags+1(a2)
  1358.     bne.s .radio_no_redraw        ; car radio bouton : le GEM
  1359.                 ; a déjà dessiné pour nous
  1360.  
  1361.     btst #SELECTABLE,ob_flags+1(a2)    ; l'objet doit etre selectionable pour changer d'état
  1362.     beq.s .no_selectable
  1363.  
  1364.     bclr #SELECTED,ob_state+1(a2)    ; désélection de l'objet
  1365.     beq.s .no_redraw_object        ; pas de redraw si pas sélectionné
  1366.  
  1367.     move.w #1,d1
  1368.     ; d2 est configuré !
  1369.     save.l d0/d3/a0-a2
  1370.     bsr GWVA_FORM_WIND_OBJ_PRG_REDRAW_PART
  1371.     load.l d0/d3/a0-a2
  1372. .no_redraw_object:
  1373. .no_selectable:
  1374.  
  1375.     bra.s .envoie_message        ; de toute façon
  1376.  
  1377. .radio_no_redraw:
  1378. .propriete_exit_non_activee:
  1379.     ; soit radio juste sélectable
  1380.     ; soit bouton juste selectable
  1381.  
  1382.     btst #SELECTABLE,ob_flags+1(a2)        ; sélectionnable
  1383.     beq .pas_selectionable
  1384.  
  1385.     cmp.w ob_state(a2),d3
  1386.     beq .etat_inchange
  1387.  
  1388.     btst #RBUTTON,ob_flags+1(a2)
  1389.     beq.s .bouton_normal
  1390.  
  1391.     ; ici : radio-bouton
  1392.  
  1393.     save.l a0-a2/d0/d2/d3
  1394.     move.l GWVA_WFORM_OBJ_FORM_PTR(a1),a0    ; +d0 num obj
  1395.     bsr GWVA_FIND_FATHER_OBJECT
  1396.     move d0,d1
  1397.     load.l a0-a2/d0/d2/d3
  1398.     swap d0    ; on garde l'obj cliqué mais on bosse avec le père
  1399.     move d1,d0
  1400.  
  1401. .bouton_normal:
  1402. .envoie_message:
  1403.  
  1404.     ; le dessin de l'objet a été modifié car l'objet a changé d'état
  1405.     ; il est peut-être radio sans rien ou juste selectable
  1406.  
  1407.     lea GWVA_WFORM_OBJ_START_OBJ_LIST(a1),a2
  1408.  
  1409. .do_research:
  1410.     tst GWVA_WFORM_OBJ_DEF_OBJ_NUM(a2)
  1411.     bmi.s .fin_liste
  1412.  
  1413.     cmp.w GWVA_WFORM_OBJ_DEF_OBJ_NUM(a2),d0
  1414.     beq.s .found_obj
  1415.     lea GWVA_WFORM_OBJFORMLIST_LENGTH(a2),a2
  1416.     bra.s .do_research
  1417.  
  1418. .fin_liste:    bra .objet_clicke_non_trouve    ; pas dans la liste
  1419.  
  1420. .found_obj:    move.l GWVA_WFORM_OBJ_DEF_OBJ_PTR_STRUCT(a2),a3    ; ptr sur la structure de l'objet
  1421.     cmp.w #GWVA_FORM_WIND_OBJECT_TEXT,GWVA_WFORM_OBJ_DEF_OBJ_TYPE(a2)
  1422.     beq.s .objet_non_selectionnable
  1423.     cmp.w #GWVA_FORM_WIND_OBJECT_BUTTON,GWVA_WFORM_OBJ_DEF_OBJ_TYPE(a2)
  1424.     beq.s .objet_selectionnable
  1425.     cmp.w #GWVA_FORM_WIND_OBJECT_MENU_POPUP,GWVA_WFORM_OBJ_DEF_OBJ_TYPE(a2)
  1426.     beq.s .menu_popup
  1427.     cmp.w #GWVA_FORM_WIND_OBJECT_RADIO_BUTTON,GWVA_WFORM_OBJ_DEF_OBJ_TYPE(a2)
  1428.     beq .radio_bouton
  1429.  
  1430.     ifd FORM_OBJ_SLIDER
  1431.     cmp.w #GWVA_FORM_WIND_OBJECT_SLIDER,GWVA_WFORM_OBJ_DEF_OBJ_TYPE(a2)
  1432.     beq .slider_object
  1433.     endc
  1434.  
  1435.     bra GWVA_MAIN_EVENTS_LOOP
  1436.  
  1437. .objet_non_selectionnable:        ; text ...
  1438.     ; placer le curseur où il faut
  1439.  
  1440.     bra.s .envoie_evnt_click_ou_dclick
  1441.  
  1442. .objet_selectionnable:                ; bouton ...
  1443.     move.l GWVA_WFORM_OBJ_FORM_PTR(a1),a4
  1444.     move d0,d3
  1445.     mulu #L_OBJECT,d3
  1446.     add d3,a4
  1447.  
  1448.     move.w ob_state(a4),d1
  1449.     move.w d1,GWVA_FORM_BTON_OBJ_STATE(a3)
  1450.  
  1451.     btst #EXIT,ob_flags+1(a4)            ; exit
  1452.     bne.s .envoie_evnt_click_ou_dclick
  1453.     btst #TOUCHEXIT,ob_flags+1(a4)            ; touchexit
  1454.     bne.s .envoie_evnt_click_ou_dclick
  1455.  
  1456.     move #GWVA_EVNT_SELECTED,d7
  1457.     btst #SELECTED,ob_state+1(a4)
  1458.     bne.s .selected
  1459.     move #GWVA_EVNT_UNSELECTED,d7
  1460. .selected:    bra.s .evenement_search
  1461.  
  1462.  
  1463. .envoie_evnt_click_ou_dclick:
  1464.     move #GWVA_EVNT_CLICK,d7
  1465.     cmp.w #2,GWVA_APP_OBJ_EVNT_MULTI_MC
  1466.     bne.s .simple_click
  1467.     move #GWVA_EVNT_DCLICK,d7
  1468. .simple_click:
  1469. .evenement_search:
  1470.     lea GWVA_WFORM_OBJ_START_OBJ_LIST(a1),a2
  1471.     bsr GWVA_WIND_OBJ_PRG_SEARCH_EVNT
  1472.  
  1473.     bra GWVA_MAIN_EVENTS_LOOP
  1474.  
  1475. .menu_popup:save.l d0/a0-a3
  1476.     objc_offset GWVA_WFORM_OBJ_FORM_PTR(a1),d0
  1477.     load.l d0/a0-a3
  1478.     move.w int_out+2,d1    ; position x
  1479.     move.w int_out+4,d2    ; position y
  1480.  
  1481.     save.l d0-d2/a0-a3
  1482.     move.w GWVA_FORM_POP_OBJ_TREE_FORM(a3),d0
  1483.     lea GWVA_APP_OBJ_TMP_ADD_TREE,a0
  1484.     bsr RETURN_TREE_OBJ_PTR
  1485.     load.l d0-d2/a0-a3
  1486.  
  1487.     lea GWVA_WFORM_OBJ_TMP_POPUP_OBJ,a4
  1488.     move.l GWVA_APP_OBJ_TMP_ADD_TREE,mn_tree(a4)
  1489.     move.w GWVA_FORM_POP_OBJ_FORM_IDX(a3),mn_menu(a4)
  1490.     move.w GWVA_FORM_POP_OBJ_SELECTION(a3),mn_item(a4)
  1491.     clr.w mn_scroll(a4)
  1492.     clr.w mn_keystate(a4)
  1493.  
  1494.     move d2,d3
  1495.     move GWVA_FORM_POP_OBJ_SELECTION(a3),d2    ; ancienne sélection
  1496.     save.l d0/d2/a0-a3
  1497.     menu_popup #GWVA_WFORM_OBJ_TMP_POPUP_OBJ,d1,d3,#GWVA_WFORM_OBJ_TMP_POPUP_OBJ
  1498.     move d0,d1
  1499.     load.l d0/d2/a0-a3
  1500.  
  1501.     cmp.w #1,d1
  1502.     bne.s .pas_de_retour_popup
  1503.  
  1504.     lea GWVA_WFORM_OBJ_TMP_POPUP_OBJ,a4
  1505.  
  1506.     cmp.w mn_item(a4),d2
  1507.     beq.s .meme_selection
  1508.  
  1509.     move.w mn_item(a4),GWVA_FORM_POP_OBJ_SELECTION(a3)
  1510.  
  1511.     save.l d0/d2/a0-a3
  1512.     move GWVA_FORM_POP_OBJ_TREE_FORM(a3),d0
  1513.     move.w mn_item(a4),d1
  1514.     bsr RETURN_TEXT_OBJ_IN_FORM_OBJ_PTR
  1515.     move.l a1,a4
  1516.     load.l d0/d2/a0-a3
  1517.  
  1518.     save.l d0/d2/a0-a4
  1519.     move.w d0,d1
  1520.     move.w GWVA_WFORM_OBJ_FORM_IDX(a1),d0
  1521.     bsr RETURN_TEXT_OBJ_IN_FORM_OBJ_PTR
  1522.     move.l a1,a5
  1523.     load.l d0/d2/a0-a4
  1524.  
  1525.     save.w d0
  1526.     clr.b d0
  1527.     COPY_STRING a4,a5
  1528.     load.w d0
  1529.  
  1530.     save.l d0/d2/a0-a3
  1531.     move.w #1,d1
  1532.     clr d2
  1533.     bsr GWVA_FORM_WIND_OBJ_PRG_REDRAW_PART
  1534.     load.l d0/d2/a0-a3
  1535.  
  1536.     move.l GWVA_FORM_POP_OBJ_CHANGE_ROUTINE(a3),a4
  1537.     cmp.l #0,a4
  1538.     beq.s .pas_de_programme_associe
  1539.  
  1540.     move GWVA_FORM_POP_OBJ_SELECTION(a3),d1
  1541.  
  1542.     jsr (a4)
  1543.  
  1544. .pas_de_programme_associe:
  1545. .meme_selection:
  1546. .pas_de_retour_popup:
  1547.  
  1548.     bra GWVA_MAIN_EVENTS_LOOP
  1549.  
  1550. .radio_bouton:
  1551.     swap d0
  1552.     move GWVA_FORM_RADIO_OBJ_SELECTION(a3),d1
  1553.     move d0,GWVA_FORM_RADIO_OBJ_SELECTION(a3)
  1554.  
  1555.     move.l GWVA_FORM_RADIO_OBJ_CHANGE_ROUTINE(a3),a4
  1556.     cmp.l #0,a4
  1557.     beq.s .pas_de_prg_associe_radio
  1558.  
  1559.     jsr (a4)
  1560.  
  1561. .pas_de_prg_associe_radio:
  1562.  
  1563.     bra GWVA_MAIN_EVENTS_LOOP
  1564.  
  1565.     ifd FORM_OBJ_SLIDER
  1566. .slider_object:
  1567.     cmp.w GWVA_FORM_SLIDER_OBJ_GRAPHIC_FIDX(a3),d0
  1568.     beq.s .s_o_deplacement_page
  1569.     cmp.w GWVA_FORM_SLIDER_OBJ_GRAPHIC_SIDX(a3),d0
  1570.     beq.s .s_o_deplacement_souris
  1571.  
  1572.     move.l #1,d1
  1573.     cmp.w GWVA_FORM_SLIDER_OBJ_GRAPHIC_P1_IDX(a3),d0
  1574.     beq .s_o_deplacement_p1
  1575.  
  1576.     neg.l d1
  1577.     cmp.w GWVA_FORM_SLIDER_OBJ_GRAPHIC_M1_IDX(a3),d0
  1578.     beq .s_o_deplacement_m1
  1579.  
  1580.     move.l GWVA_FORM_SLIDER_OBJ_SIZE(a3),d1
  1581.     sub.l #1,d1        ; taille page = taille slider - 1
  1582.     cmp.w GWVA_FORM_SLIDER_OBJ_GRAPHIC_P1P_IDX(a3),d0
  1583.     beq .s_o_deplacement_p1_page
  1584.  
  1585.     neg.l d1
  1586.     cmp.w GWVA_FORM_SLIDER_OBJ_GRAPHIC_M1P_IDX(a3),d0
  1587.     beq .s_o_deplacement_m1_page
  1588.  
  1589.     bra GWVA_MAIN_EVENTS_LOOP
  1590.  
  1591. .s_o_deplacement_page:
  1592. ; Deplacement à droite si la souris est à droite du fils 
  1593.     save.l a0-a3
  1594.     objc_offset GWVA_WFORM_OBJ_FORM_PTR(a1),GWVA_FORM_SLIDER_OBJ_GRAPHIC_SIDX(a3)
  1595.     load.l a0-a3
  1596.     move.w int_out+2,d2    ; position x
  1597.  
  1598.     move.l GWVA_FORM_SLIDER_OBJ_SIZE(a3),d1
  1599.     sub.l #1,d1        ; taille page = taille slider - 1
  1600.  
  1601.     cmp.w GWVA_APP_OBJ_EVNT_MULTI_MX,d2
  1602.     blt.s .s_o_deplacement_p1_page
  1603.  
  1604.     neg.l d1
  1605.     cmp.w GWVA_APP_OBJ_EVNT_MULTI_MX,d2
  1606.     bgt.s .s_o_deplacement_m1_page
  1607.  
  1608.     bra GWVA_MAIN_EVENTS_LOOP
  1609.  
  1610. .s_o_deplacement_souris:
  1611.     save.l a0-a3
  1612.     graf_slidebox GWVA_WFORM_OBJ_FORM_PTR(a1),GWVA_FORM_SLIDER_OBJ_GRAPHIC_FIDX(a3),GWVA_FORM_SLIDER_OBJ_GRAPHIC_SIDX(a3),GWVA_FORM_SLIDER_OBJ_ORIENT(a3)
  1613.     load.l a0-a3
  1614.  
  1615.     move.l GWVA_FORM_SLIDER_OBJ_LENGTH(a3),d2
  1616.     sub.l GWVA_FORM_SLIDER_OBJ_SIZE(a3),d2
  1617.     bpl.s .s_o_positif
  1618.     moveq #0,d2
  1619. .s_o_positif:
  1620.     ext.l d0
  1621.     moveq #0,d3
  1622.     moveq #0,d1
  1623.     mulu.l d0,d3:d2
  1624.     add.l #1000-1,d2
  1625.     addx.l d1,d3
  1626.     divu.l #1000,d3:d2
  1627.  
  1628.     move.l d2,d1
  1629.     sub.l GWVA_FORM_SLIDER_OBJ_POS(a3),d1
  1630.  
  1631.     bra .s_o_deplacement_slider
  1632.  
  1633. .s_o_deplacement_slider:
  1634. .s_o_deplacement_m1_page:
  1635. .s_o_deplacement_p1_page:
  1636. .s_o_deplacement_p1:
  1637. .s_o_deplacement_m1:
  1638.  
  1639.     move.l GWVA_FORM_SLIDER_OBJ_LENGTH(a3),d3
  1640.     sub.l GWVA_FORM_SLIDER_OBJ_SIZE(a3),d3
  1641.     bpl.s .s_o_positif1
  1642.     moveq #0,d3
  1643. .s_o_positif1:
  1644.  
  1645.     move.l GWVA_FORM_SLIDER_OBJ_POS(a3),d2
  1646.  
  1647.     add.l d1,d2
  1648.     bge.s .s_o_positif2
  1649.     moveq #0,d2
  1650. .s_o_positif2:
  1651.     cmp.l d2,d3
  1652.     bge.s .s_o_val_deplacement_ok
  1653. ;    move.l GWVA_FORM_SLIDER_OBJ_POS(a3),d2
  1654.     move.l d3,d2
  1655. .s_o_val_deplacement_ok:
  1656.  
  1657.     move.l d2,d1
  1658.     sub.l GWVA_FORM_SLIDER_OBJ_POS(a3),d1    ; d1.l = 0 : pas de déplacement physique
  1659.     
  1660.     move.l d2,GWVA_FORM_SLIDER_OBJ_POS(a3)
  1661.  
  1662.     save.l d1/a0-a3
  1663.     move.l a3,a2
  1664.     bsr GWVA_SLIDER_OBJ_PRG_SET_SLIDER
  1665.     load.l d1/a0-a3
  1666.  
  1667.     add.l d7,d1
  1668.  
  1669.     tst.l d1
  1670.     beq.s .s_o_pas_deplacement_slider
  1671.  
  1672.     move.l GWVA_FORM_SLIDER_OBJ_CHANGE_ROUTINE(a3),a4
  1673.     cmp.l #0,a4
  1674.     beq.s .s_o_pas_de_routine
  1675.  
  1676.     move.l GWVA_FORM_SLIDER_OBJ_POS(a3),d0    ; d1.l déplacement en élément
  1677.     jsr (a4)
  1678.  
  1679. .s_o_pas_de_routine:
  1680.  
  1681. .s_o_pas_deplacement_slider:
  1682.     bra GWVA_MAIN_EVENTS_LOOP
  1683.  
  1684.     endc
  1685.  
  1686.         *-----------------*
  1687. .objet_clicke_non_trouve:
  1688.     move.l GWVA_WFORM_OBJ_FORM_PTR(a1),a2
  1689.     move d0,d3
  1690.     mulu #L_OBJECT,d3
  1691.     add.l d3,a2
  1692.     
  1693. .etat_inchange:
  1694. .pas_selectionable:
  1695. .object_disabled:
  1696.     tst.l GWVA_WFORM_OBJ_CLICK_ROUTINE(a1)
  1697.     beq.s .pas_de_routine_click
  1698.     ; a0 = pointe sur la fenêtre formulaire
  1699.     ; a1 = pointe sur la structure formulaire
  1700.     ; a2 = pointeur sur la structure de l'objet clické
  1701.     ; d0 = numéro de l'objet
  1702.     ; d1.w = object flags
  1703.     ; d2.w = object state
  1704.     movem.w ob_flags(a2),d1-d2
  1705.     jsr ([GWVA_WFORM_OBJ_CLICK_ROUTINE,a1])
  1706.     bra GWVA_MAIN_EVENTS_LOOP
  1707.  
  1708. .pas_de_routine_click:
  1709.  
  1710. .pas_d_objet:    ; dans ce cas on renvoie le click tout simplement
  1711. .pas_fenetre_formulaire:
  1712.  
  1713.     endc        ; ifd MDL_WIND_FORM
  1714.  
  1715.     ; pour les types 1,2 la routine suivante est suffisante
  1716.  
  1717. .pas_a_nous_la_fenetre:
  1718.  
  1719.     endc             ; ifd MDL_WIND
  1720.  
  1721. .its_not_left_button:
  1722.  
  1723.     move.l GWVA_APP_OBJ_PTR,a0
  1724.     tst.l GWVA_APP_OBJ_EVNT_BUTTON(a0)
  1725.     beq GWVA_MAIN_EVENTS_LOOP
  1726.  
  1727.     move.w GWVA_APP_OBJ_TMP_WIND_HANDLE,d0
  1728.     movem.w GWVA_APP_OBJ_EVNT_MULTI_MX,d1/d2
  1729.     move.w GWVA_APP_OBJ_EVNT_MULTI_MB,d3
  1730.     move.w GWVA_APP_OBJ_EVNT_MULTI_MC,d4
  1731.  
  1732.     jsr ([GWVA_APP_OBJ_EVNT_BUTTON,a0])
  1733.  
  1734.     bra GWVA_MAIN_EVENTS_LOOP
  1735.  
  1736. *--------------------------------------------------------------------------*
  1737. GWVA_APP_OBJ_PRG_EVNT_MOUSE1:
  1738.     move #EVNT_MOUSE1,d7
  1739.     bsr GWVA_APP_OBJ_PRG_CLEAR_EVNT_BIT
  1740.  
  1741.     move.l GWVA_APP_OBJ_PTR,a0
  1742.     tst.l GWVA_APP_OBJ_EVNT_MOUSE1(a0)
  1743.     beq GWVA_MAIN_EVENTS_LOOP
  1744.  
  1745.     movem.w GWVA_APP_OBJ_EVNT_MULTI_MX,d0/d1
  1746.     move.w GWVA_APP_OBJ_EVNT_MULTI_MB,d2
  1747.     move.w GWVA_APP_OBJ_EVNT_MULTI_MC,d3
  1748.  
  1749.     jsr ([GWVA_APP_OBJ_EVNT_MOUSE1,a0])
  1750.  
  1751.     bra GWVA_MAIN_EVENTS_LOOP
  1752. *--------------------------------------------------------------------------*
  1753. GWVA_APP_OBJ_PRG_EVNT_MOUSE2:
  1754.     move #EVNT_MOUSE2,d7
  1755.     bsr GWVA_APP_OBJ_PRG_CLEAR_EVNT_BIT
  1756.  
  1757.     move.l GWVA_APP_OBJ_PTR,a0
  1758.     tst.l GWVA_APP_OBJ_EVNT_MOUSE2(a0)
  1759.     beq GWVA_MAIN_EVENTS_LOOP
  1760.  
  1761.     movem.w GWVA_APP_OBJ_EVNT_MULTI_MX,d0/d1
  1762.     move.w GWVA_APP_OBJ_EVNT_MULTI_MB,d2
  1763.     move.w GWVA_APP_OBJ_EVNT_MULTI_MC,d3
  1764.  
  1765.     jsr ([GWVA_APP_OBJ_EVNT_MOUSE2,a0])
  1766.  
  1767.     bra GWVA_MAIN_EVENTS_LOOP
  1768. *--------------------------------------------------------------------------*
  1769. GWVA_APP_OBJ_PRG_EVNT_MESSAGE:
  1770.  
  1771.     move #EVNT_MESAG,d7
  1772.     bsr GWVA_APP_OBJ_PRG_CLEAR_EVNT_BIT
  1773.  
  1774.     tst.w GWVA_APP_OBJ_MSG_BUF+2*2    ; message étendu ? (+ de 16 octets)
  1775.     beq.s .pas_lecture_buffer_message_etendu
  1776.  
  1777. ; Il faut absolument lire le reste du message s'il est présent ; sinon
  1778. ; cela crée un faux évènement MESSAGE GEM.
  1779.     appl_read global+_AESapid,GWVA_APP_OBJ_MSG_BUF+2*2,#GWVA_APP_OBJ_MSG_EXT_BUF
  1780. .pas_lecture_buffer_message_etendu:
  1781.  
  1782.     move.w GWVA_APP_OBJ_MSG_BUF,d0    ; numéro message
  1783.  
  1784.     ifd MDL_WIND
  1785.  
  1786.     bclr #14,d0            ; bit 14 : identificateur des messages perso.
  1787.  
  1788.     cmp.w #WM_REDRAW,d0
  1789.     blt .not_a_wind_message
  1790.     cmp.w #WM_ALLICONIFY,d0
  1791.     bgt .not_a_wind_message
  1792.  
  1793.     ifd OPT_DEBUG_VISUAL_WIND_OBJ_EVNT
  1794.     bsr .debug_msg_alert_box
  1795.     endc
  1796.  
  1797.     move GWVA_APP_OBJ_MSG_BUF+3*2,d0    ; handle de la fenêtre concernée
  1798.     bsr GWVA_WIND_OBJ_PRG_RETURN_PTR_FROM_HANDLE
  1799.         ; retour : a0 : structure de la fenêtre
  1800.     tst d7
  1801.     bmi .suite_event_message    ; pas 1 fenêtre à nous
  1802.  
  1803.     ifd OPT_GWVA_MULTIFORM_ALWAYS_UPDATE
  1804.     bsr GWVA_WIND_OBJ_PRG_UPDATE_TOOLB_AND_FORM_POS
  1805.     endc
  1806.  
  1807.     move GWVA_APP_OBJ_MSG_BUF,d0    ; quelle action ?
  1808.     bclr #14,d0            ; message perso.
  1809.     move d0,d1
  1810.     sub #WM_REDRAW,d1
  1811.     lsl.w #2,d1
  1812.     lea GWVA_WIND_OBJ_PRG_WM_JUMP_TAB,a1
  1813.     jsr ([a1,d1.w])        ; action avec a0=ptr d0=msg
  1814.  
  1815.     bra .suite_event_message
  1816.  
  1817.             ***********
  1818.  
  1819.     ifd OPT_DEBUG_VISUAL_WIND_SYSTEM_OBJ_EVNT
  1820.  
  1821. .debug_msg_alert_box:
  1822.     save.l d0-a6
  1823.  
  1824.     lea GWVA_WIND_SYSTEM_DEBUG_EVNT_ALERT_MSG_NR,a1
  1825.     move.l #'    ',(a1)
  1826.     move.l #'    ',4(a1)
  1827.     move.l #'    ',8(a1)
  1828.     move.w #'  ',12(a1)
  1829.  
  1830.     move GWVA_APP_OBJ_MSG_BUF+0*2,d0
  1831.     lea GWVA_DEBUG_EVNT_TABLE,a0
  1832. .search_loop:
  1833.     tst.w (a0)
  1834.     bmi.s .not_found
  1835.     cmp.w (a0),d0
  1836.     beq.s ._found
  1837.     lea 2+4(a0),a0
  1838.     bra.s .search_loop
  1839.  
  1840. .not_found:    and.l #$ffff,d0
  1841.     bsr STOCK_DECI
  1842.     move.b #' ',-1(a1)
  1843.     bra.s .no_text_for_this_one
  1844.  
  1845. ._found:    move.l 2(a0),a0
  1846.  
  1847.     COPY_STRING_0 a0,a1
  1848.     move.b #' ',-1(a1)
  1849. .no_text_for_this_one:
  1850.  
  1851.     clr.l d0
  1852.     move GWVA_APP_OBJ_MSG_BUF+1*2,d0
  1853.     lea GWVA_WIND_SYSTEM_DEBUG_EVNT_ALERT_APP_ID,a1
  1854.     bsr.s .fill_3char_field_with_deci
  1855.  
  1856.     clr.l d0
  1857.     move GWVA_APP_OBJ_MSG_BUF+2*2,d0
  1858.     lea GWVA_WIND_SYSTEM_DEBUG_EVNT_ALERT_EXT_SIZE,a1
  1859.     bsr.s .fill_3char_field_with_deci
  1860.  
  1861.     move GWVA_APP_OBJ_MSG_BUF+3*2,d0
  1862.     lea GWVA_WIND_SYSTEM_DEBUG_EVNT_ALERT_WORD4,a1
  1863.     bsr .fill_4char_field_with_hexa
  1864.     move GWVA_APP_OBJ_MSG_BUF+4*2,d0
  1865.     lea GWVA_WIND_SYSTEM_DEBUG_EVNT_ALERT_WORD5,a1
  1866.     bsr .fill_4char_field_with_hexa
  1867.     move GWVA_APP_OBJ_MSG_BUF+5*2,d0
  1868.     lea GWVA_WIND_SYSTEM_DEBUG_EVNT_ALERT_WORD6,a1
  1869.     bsr .fill_4char_field_with_hexa
  1870.     move GWVA_APP_OBJ_MSG_BUF+6*2,d0
  1871.     lea GWVA_WIND_SYSTEM_DEBUG_EVNT_ALERT_WORD7,a1
  1872.     bsr .fill_4char_field_with_hexa
  1873.     move GWVA_APP_OBJ_MSG_BUF+7*2,d0
  1874.     lea GWVA_WIND_SYSTEM_DEBUG_EVNT_ALERT_WORD8,a1
  1875.     bsr .fill_4char_field_with_hexa
  1876.  
  1877.     lea GWVA_WIND_SYSTEM_DEBUG_EVNT_ALERT,a0
  1878.     moveq #1,d0
  1879.     bsr ALERT_BOX
  1880.  
  1881.     load.l d0-a6
  1882.     rts
  1883.  
  1884. .fill_3char_field_with_deci:
  1885.     move.w #'  ',1(a1)
  1886.     move.w 2(a1),-(sp)
  1887.     save.l a1
  1888.     bsr STOCK_DECI
  1889.     move.b #' ',-1(a1)
  1890.     load.l a1
  1891.     load.w d0
  1892.     move.b d0,3(a1)
  1893.     rts
  1894.  
  1895. .fill_4char_field_with_hexa:
  1896.     move.w 3(a1),-(sp)
  1897.     move #16,d1
  1898.     save.l a1
  1899.     bsr STOCK_HEXA
  1900.     load.l a1
  1901.     load.w d0
  1902.     move.b d0,4(a1)
  1903.     rts
  1904.  
  1905.     endc        ; ifd OPT_DEBUG_VISUAL_WIND_SYSTEM_OBJ_EVNT
  1906.  
  1907.             ***********
  1908.  
  1909. .not_a_wind_message:
  1910.  
  1911.     ifd OPT_DEBUG_VISUAL_SYSTEM_EVNT
  1912.     bsr .debug_msg_alert_box
  1913.     endc
  1914.  
  1915.     move.w GWVA_APP_OBJ_MSG_BUF,d0    ; car on a bclr #14,d0
  1916.  
  1917.     endc
  1918.  
  1919.     ifd MDL_MENU
  1920.     cmp.w #MN_SELECTED,d0        ; si on recoit l'évènement menu, c'est qu'il y a un menu en haut !
  1921.     bne.s .not_a_menu_message
  1922.  
  1923.     move GWVA_APP_OBJ_MSG_BUF+3*2,d0    ; Top menu sélectionné
  1924.  
  1925.     save.w d0
  1926.     move.w GWVA_APP_OBJ_MSG_BUF+4*2,d0    ; Menu Idx
  1927.     move.l GWVA_APP_OBJ_MSG_BUF+5*2,d1    ; Tree ad.
  1928.     move.l ([GWVA_APP_OBJ_PTR.l],GWVA_APP_OBJ_MAIN_MENU_PTR),a0
  1929.     bsr GWVA_EXEC_MENU_ROUTINE_FROM_MENU_AD_AND_IDX
  1930.     load.w d0
  1931.  
  1932.     move.l GWVA_APP_OBJ_PTR,a0
  1933.     move.l GWVA_APP_OBJ_MAIN_MENU_PTR(a0),a1
  1934.     menu_tnormal GWVA_MENU_STRUCT_PTR(a1),d0,#1    ; menu en vidéo normale
  1935.     bra.s .suite_event_message
  1936.  
  1937. .not_a_menu_message:
  1938.     endc
  1939.  
  1940.         *---------------------*
  1941.  
  1942.     lea GWVA_APP_OBJ_MSG_BUF,a0
  1943.     lea GWVA_APP_OBJ_MSG_EXT_BUF,a1
  1944.  
  1945.     cmp.w #AP_TERM,d0
  1946.     bne.s .pas_ap_term
  1947.  
  1948.     move.w GWVA_APP_OBJ_MSG_BUF+5*2,d1
  1949.  
  1950. .pas_ap_term:
  1951.     lea GWVA_APP_OBJ_EVNT_TABLE,a2
  1952. .scan:    tst (a2)
  1953.     bmi.s .other_message
  1954.     cmp.w (a2),d0
  1955.     beq.s .found
  1956.     lea 2+2(a2),a2
  1957.     bra.s .scan
  1958.  
  1959. .found:    move.w 2(a2),d2
  1960.     move.l ([GWVA_APP_OBJ_PTR.l],d2),a2
  1961.  
  1962.     cmp.w #AC_OPEN,d0
  1963.     beq .ac_open
  1964.     cmp.w #AC_CLOSE,d0
  1965.     beq .ac_close
  1966.  
  1967.     cmp.l #0,a2
  1968.     beq.s .suite_event_message
  1969.  
  1970.     jsr (a2)
  1971.     bra.s .suite_event_message
  1972.  
  1973. .other_message:
  1974.     move.l GWVA_APP_OBJ_PTR,a2
  1975.     tst.l GWVA_APP_OBJ_ALL_OTHER(a2)
  1976.     beq.s .suite_event_message
  1977.  
  1978.     move.l GWVA_APP_OBJ_ALL_OTHER(a2),a2
  1979.     jsr (a2)
  1980.  
  1981. .suite_event_message:
  1982. ; On va tester s'il reste des messages a traiter dans la buffer.
  1983. ; Pour sortir de l'evnt_multi, on utilise l'evenement timer
  1984.     evnt_multi #$10+$20,
  1985. &    #0,#0,#0,
  1986. &    #0,#0,#0,#0,#0,
  1987. &    #0,#0,#0,#0,#0,
  1988. &    #GWVA_APP_OBJ_MSG_BUF,
  1989. &    #1
  1990.  
  1991.     btst #EVNT_MESAG,d0
  1992.     bne GWVA_APP_OBJ_PRG_EVNT_MESSAGE    ; il y a un message en attente -> on se rappelle
  1993.  
  1994.     bra GWVA_MAIN_EVENTS_LOOP
  1995.  
  1996.  
  1997. .ac_open:    move.w GWVA_APP_OBJ_ACC_NUMBER,d2
  1998.     cmp.w GWVA_APP_OBJ_MSG_BUF+4*2,d2
  1999.     bne .suite_event_message    ; pas nous
  2000.  
  2001.     cmp.l #0,a2            ; pas d'init VDI si pas de routine
  2002.     beq .suite_event_message
  2003.  
  2004.     save.l d0-d1/a0-a2
  2005.     bsr GWVA_APP_OBJ_PRG_ACC_OPEN_VSTATION
  2006.     load.l d0-d1/a0-a2
  2007.     tst d7
  2008.     bmi .suite_event_message    ; pas b infinie si jamais 1 vstation se libère ?
  2009.  
  2010.     jsr (a2)
  2011.  
  2012.     bra .suite_event_message
  2013.  
  2014.  
  2015. .ac_close:    move.w GWVA_APP_OBJ_ACC_NUMBER,d2
  2016.     cmp.w GWVA_APP_OBJ_MSG_BUF+3*2,d2
  2017.     bne .suite_event_message    ; pas nous
  2018.  
  2019.     cmp.l #0,a2
  2020.     beq.s .ferme_qd_meme
  2021.  
  2022.     jsr (a2)
  2023.  
  2024. .ferme_qd_meme:
  2025.     bsr GWVA_APP_OBJ_PRG_ACC_CLOSE_VSTATION
  2026.  
  2027.     bra .suite_event_message
  2028.  
  2029. *****************************************************************************
  2030. GWVA_APP_OBJ_PRG_CLEAR_EVNT_BIT:
  2031.     move.w GWVA_APP_OBJ_EVENT_BITS,d6
  2032.     bclr d7,d6
  2033.     move.w d6,GWVA_APP_OBJ_EVENT_BITS
  2034.     clr d0
  2035.     bset d7,d0
  2036.     rts
  2037.  
  2038. ******************************************************************************
  2039.  
  2040.     ifd MDL_MENU
  2041. GWVA_MENU_OR_WIND_FORM
  2042.     else
  2043.         ifd MDL_WIND_FORM
  2044. GWVA_MENU_OR_WIND_FORM
  2045.         endc
  2046.     endc
  2047.  
  2048.     ifd GWVA_MENU_OR_WIND_FORM
  2049.  
  2050. GWVA_CONVERT_KC_IN_OBJECT_IDX:    ; d0 : KC (scan code + ascii), a0 : adresse 1er objet dans la table de comparaison, d1=longeur de la structure
  2051.     move.b #%1000,d2    ; masque pour les touches spéciales
  2052.     tst.b d0
  2053.     bne.s .search_in_table
  2054. ; Donc si l'ikbd.bas est non nul on se fout du shift car il est
  2055. ; déjà compris dans le code : ex. ctrl+4=shift/ctrl+' <> ctrl+'
  2056. ; Donc évitez ctrl ou alt + touches qui varient avec le shift selon les pays autres que A-Z
  2057.  
  2058.     lsr.w #8,d0
  2059.  
  2060.     save.l d0-d1/a0
  2061.     pea -1
  2062.     pea -1
  2063.     pea -1
  2064.     appel xbios,$10,14
  2065.     move.l d0,a1
  2066.     load.l d0-d1/a0
  2067.  
  2068.     move.l (a1),a2    ; table unshiftée
  2069.  
  2070.     btst #0,GWVA_APP_OBJ_EVNT_MULTI_KS+1
  2071.     bne.s .shift
  2072.     btst #1,GWVA_APP_OBJ_EVNT_MULTI_KS+1
  2073.     beq.s .pas_shift
  2074. .shift:    
  2075.     move.l 4(a1),a2    ; table shiftée
  2076. .pas_shift:
  2077.     tst.b (a2,d0.w)
  2078.     beq.s .pas_ascii
  2079.     move.b (a2,d0.w),d0    ; d0 = ascii du scan-code pour le pays en cours
  2080.     move.b #%1100,d2
  2081.     bra.s .search_in_table
  2082. .pas_ascii:    bset #7,d0
  2083.     move.b #%1111,d2
  2084.     bra.s .search_in_table
  2085.  
  2086. .search_in_table:
  2087.     tst.w GWVA_APP_OBJ_MENUWIND_NUM(a0)        ; d7 <>-1 OK
  2088.     bmi.s .finis
  2089.     cmp.b GWVA_APP_OBJ_MENUWIND_SHORTCUT+1(a0),d0    ; car dans GWVA_APP_OBJ_MENUWIND_SHORTCUT(a0) : shortcut
  2090.     beq.s .compare_touches_speciales
  2091. .loop:    lea (a0,d1.w),a0
  2092.     bra.s .search_in_table
  2093. .compare_touches_speciales:
  2094.     move.b GWVA_APP_OBJ_MENUWIND_SHORTCUT(a0),d3    ; shortcut
  2095.     move.b GWVA_APP_OBJ_EVNT_MULTI_KS+1,d4
  2096.     move d3,d5
  2097.     and #%11,d5
  2098.     beq.s .pas_de_passe_droit
  2099.     move d4,d5
  2100.     and #%11,d5
  2101.     beq.s .pas_de_passe_droit
  2102.     and.b #%11111100,d2
  2103. .pas_de_passe_droit:
  2104.     and.b d2,d3
  2105.     and.b d2,d4
  2106.     cmp.b d3,d4
  2107.     bne.s .loop
  2108.     move.w GWVA_APP_OBJ_MENUWIND_NUM(a0),d0    ; c'est l'objet idx
  2109.     clr d7
  2110.     rts
  2111. .finis:    moveq #GWVA_ERROR_GENERIC,d7
  2112.     rts
  2113.  
  2114.  
  2115.  
  2116. GWVA_EXEC_MENU_ROUTINE_FROM_KC:
  2117.         ; a0 : ptr sur une structure GWVA_MENU_STRUCT
  2118.         ; d0.w : KC
  2119.         ; d1.w : taille de la table de recherche (CONVERT_KC_IN_OBJECT_IDX)
  2120.     save.l d0-d1/a0
  2121.     lea GWVA_MENU_STRUCT_START_LIST(a0),a0
  2122.     bsr GWVA_CONVERT_KC_IN_OBJECT_IDX
  2123.     move.w d0,d2
  2124.     load.l d0-d1/a0
  2125.     tst d7
  2126.     bne.s .dans_sous_menu
  2127.  
  2128.     move d2,d0
  2129.     lea GWVA_MENU_STRUCT_START_LIST(a0),a0
  2130.     bra GWVA_EXEC_MENU_ROUTINE_FROM_MENU_IDX
  2131.  
  2132. .dans_sous_menu:
  2133.     move.l GWVA_MENU_STRUCT_LIST_ATTACH_PTR(a0),a1
  2134.     cmp.l #0,a1
  2135.     beq.s .pas_de_sous_menu
  2136.  
  2137. .recherche_sous_menu:
  2138.     move.l (a1)+,a0
  2139.     cmp.l #0,a0
  2140.     beq.s .pas_de_sous_menu
  2141.  
  2142.     save.l d0-d1/a0-a1
  2143.     lea GWVA_SUB_MENU_STRUCT_START_LIST(a0),a0
  2144.     bsr GWVA_CONVERT_KC_IN_OBJECT_IDX
  2145.     move.w d0,d2
  2146.     load.l d0-d1/a0-a1
  2147.     tst d7
  2148.     bne.s .recherche_sous_menu
  2149.     
  2150.     move d2,d0
  2151.     lea GWVA_SUB_MENU_STRUCT_START_LIST(a0),a0
  2152.     bra.s GWVA_EXEC_MENU_ROUTINE_FROM_MENU_IDX
  2153.  
  2154. .pas_de_sous_menu:
  2155.     moveq #GWVA_ERROR_GENERIC,d7
  2156.     rts
  2157.  
  2158.  
  2159. GWVA_EXEC_MENU_ROUTINE_FROM_MENU_AD_AND_IDX:
  2160.         ; a0 : ptr sur une structure GWVA_MENU_STRUCT
  2161.         ; d0.w : Index du menu
  2162.         ; d1.l : Adresse du tree contenant le menu
  2163.  
  2164.     tst.l d1
  2165.     beq.s .aes_inferieur_330    ; pas de mot long pointant sur l'adresse du tree du menu
  2166.  
  2167.     cmp.l (GWVA_MENU_STRUCT_PTR,a0),d1
  2168.     bne.s .in_a_sub_menu
  2169.  
  2170. .aes_inferieur_330:
  2171.     lea GWVA_MENU_STRUCT_START_LIST(a0),a0
  2172.     bra.s GWVA_EXEC_MENU_ROUTINE_FROM_MENU_IDX
  2173.  
  2174. .in_a_sub_menu:
  2175.     moveq #GWVA_ERROR_GENERIC,d7
  2176.  
  2177.     move.l GWVA_MENU_STRUCT_LIST_ATTACH_PTR(a0),a1
  2178.     cmp.l #0,a1
  2179.     beq.s .pas_de_sous_menu
  2180.  
  2181. .recherche_sous_menu:
  2182.     move.l (a1)+,a0
  2183.     cmp.l #0,a0
  2184.     beq.s .pas_de_sous_menu
  2185.  
  2186.     save.l d0-d1/a0-a1
  2187.     move.w GWVA_SUB_MENU_TREE(a0),d0
  2188.     lea GWVA_APP_OBJ_TMP_ADD_TREE,a0
  2189.     bsr RETURN_TREE_OBJ_PTR
  2190.     load.l d0-d1/a0-a1
  2191.  
  2192.     cmp.l GWVA_APP_OBJ_TMP_ADD_TREE,d1
  2193.     bne.s .recherche_sous_menu
  2194.  
  2195.     lea GWVA_SUB_MENU_STRUCT_START_LIST(a0),a0
  2196.     save.l d0-d1/a1
  2197.     bsr.s GWVA_EXEC_MENU_ROUTINE_FROM_MENU_IDX
  2198.     load.l d0-d1/a1
  2199.     tst d7
  2200.     bne.s .recherche_sous_menu
  2201.  
  2202. .pas_de_sous_menu:
  2203.     rts
  2204.  
  2205. GWVA_EXEC_MENU_ROUTINE_FROM_MENU_IDX:
  2206.         ; a0 : ptr sur une structure _STRUCT_START_LIST
  2207.         ; d0.w : Index du menu
  2208.     tst.w GWVA_MENU_OBJ_DEF_OBJ_NUM(a0)
  2209.     bmi.s .no_routine_found
  2210.     cmp.w GWVA_MENU_OBJ_DEF_OBJ_NUM(a0),d0
  2211.     beq.s .found
  2212.     lea 2+1+1+4(a0),a0
  2213.     bra.s GWVA_EXEC_MENU_ROUTINE_FROM_MENU_IDX
  2214. .found:    tst.l ([a0,GWVA_MENU_OBJ_DEF_OBJ_PTR])
  2215.     beq.s .no_routine_found
  2216.     move.l a0,a1
  2217.     move GWVA_APP_OBJ_MSG_BUF+3*2,d0        ; Top menu sélectionné
  2218.     move.w GWVA_APP_OBJ_MSG_BUF+4*2,d1        ; Menu-item Idx
  2219.     move.w GWVA_APP_OBJ_MSG_BUF+7*2,d2        ; Menu Idx
  2220.     move.l GWVA_APP_OBJ_MSG_BUF+5*2,a0        ; Tree ad.
  2221.     jsr ([a1,GWVA_MENU_OBJ_DEF_OBJ_PTR])    ; 
  2222.     clr d7
  2223.     rts
  2224. .no_routine_found:
  2225.     moveq #GWVA_ERROR_GENERIC,d7
  2226.     rts
  2227.  
  2228.     endc
  2229.  
  2230. *--------------------------------------------------------------------------*
  2231.  
  2232. GWVA_INFINITE_LOOP:
  2233.     evnt_mesag #GWVA_APP_OBJ_MSG_BUF
  2234.     bra.s GWVA_INFINITE_LOOP
  2235.  
  2236. GWVA_APP_OBJ_PRG_WAIT_EVENTS:    ; d0.l = timer en 1/1000 ème de sec
  2237. ; attends le temps apparti, si d0=1 : pause pour donner la main au gem le minimum vital
  2238.  
  2239.     evnt_timer d0
  2240.  
  2241.     rts
  2242.  
  2243. *--------------------------------------------------------------------------*
  2244.  
  2245.     endc        ; MDL_EVENT
  2246.  
  2247. *--------------------------------------------------------------------------*
  2248. *--------------------------------------------------------------------------*
  2249. *--------------------------------------------------------------------------*
  2250. *---------------------     CODE DE SORTIE VISUAL    -----------------------*
  2251. *--------------------------------------------------------------------------*
  2252. *--------------------------------------------------------------------------*
  2253. *--------------------------------------------------------------------------*
  2254.  
  2255.  
  2256. VISUAL40_END:
  2257.  
  2258.     ifd MDL_GEM
  2259.  
  2260.     ifd MDL_WIND
  2261.     bsr GWVA_WIND_OBJ_PRG_DELETE_ALL_WIND
  2262.     endc
  2263.  
  2264.     tst.l global+_AESrscfile    ; (?)
  2265.     ble.s .no_rsc_loaded
  2266.  
  2267.     ifd MDL_MENU
  2268.     move.l GWVA_APP_OBJ_PTR,a0
  2269.  
  2270.     tst.l GWVA_APP_OBJ_MAIN_MENU_PTR(a0)
  2271.     beq.s .pas_de_menu
  2272.     move.l GWVA_APP_OBJ_MAIN_MENU_PTR(a0),a1
  2273.     tst.l GWVA_MENU_STRUCT_PTR(a1)
  2274.     beq.s .pas_de_menu
  2275.     move.l GWVA_MENU_STRUCT_PTR(a1),a0
  2276.     bsr GWVA_HIDE_MENU
  2277. .pas_de_menu:
  2278.     endc
  2279.  
  2280.     move.l GWVA_APP_OBJ_PTR,a0
  2281.     btst #GWVA_APP_BIT_BACKGROUND,GWVA_APP_OBJ_FLAGS(a0)
  2282.     beq.s .pas_de_background
  2283.     clr.l int_in+4
  2284.     wind_set #0,#WF_NEWDESK
  2285. .pas_de_background:
  2286.  
  2287.     move.l GWVA_APP_OBJ_PTR,a0
  2288.     btst #GWVA_APP_BIT_RSC_IN_MEM,GWVA_APP_OBJ_FLAGS(a0)
  2289.     bne.s .rsc_in_mem_to_free
  2290.     rsrc_free
  2291.     bra.s .rsc_load_free
  2292. .rsc_in_mem_to_free:
  2293.     ifd MDL_RELOCATE_RSC
  2294.     tst.l GWVA_APP_OBJ_ADD_MALLOC_RSC_ICN
  2295.     beq.s .pas_buffer_icones_couleurs
  2296.     MFREE GWVA_APP_OBJ_ADD_MALLOC_RSC_ICN
  2297.     clr.l GWVA_APP_OBJ_ADD_MALLOC_RSC_ICN
  2298. .pas_buffer_icones_couleurs:
  2299.     endc
  2300. .rsc_load_free:
  2301.  
  2302. .no_rsc_loaded:
  2303. GWVA_APP_RSC_LOAD_FAILED:
  2304.  
  2305.     graf_mouse    #0        ; arrow please
  2306.     v_clsvwk            ; then closing the virtual workstation
  2307.  
  2308.     ifd MDL_WIND_BITMAP
  2309.     bsr GWVA_WBITM_OBJ_PRG_RESET_DESK_PALETTE
  2310.     endc
  2311.  
  2312. GWVA_BRANCH_IF_OPEN_WORKSTATION_FAILED:
  2313.     appl_exit
  2314.  
  2315. GWVA_BRANCH_IF_APPL_INIT_FAILED:
  2316.  
  2317.     endc            ; ifd MDL_GEM
  2318.  
  2319.     move.l GWVA_APP_OBJ_PTR,a0
  2320.     tst.l GWVA_APP_OBJ_TSR_SIZE(a0)
  2321.     bne.s .tsr
  2322.  
  2323.     move.w GWVA_APP_OBJ_RETURN_CODE,-(sp)
  2324.     appel dos,$4c,4        ; Pterm
  2325.  
  2326. .tsr:    move.w GWVA_APP_OBJ_RETURN_CODE,-(sp)
  2327.     move.l GWVA_APP_OBJ_TSR_SIZE(a0),-(sp)
  2328.     appel dos,$31,8    ; laisse le programme résident
  2329.  
  2330. *--------------------------------------------------------------------------*
  2331.  
  2332.     ifd MDL_GEM
  2333.  
  2334.     ifd MDL_EVENTS
  2335.  
  2336. GWVA_APP_OBJ_PRG_ACC_OPEN_VSTATION:
  2337.     tst GWVA_APP_OBJ_ACC_STATE
  2338.     bne.s .deja_ouverte
  2339.  
  2340.     bsr.s GWVA_APP_OBJ_PRG_OPEN_VSTATION
  2341.     tst d7
  2342.     bmi.s .probleme
  2343.     move #1,GWVA_APP_OBJ_ACC_STATE
  2344.  
  2345. .probleme:
  2346. .deja_ouverte:
  2347.     rts
  2348.  
  2349. GWVA_APP_OBJ_PRG_ACC_CLOSE_VSTATION:
  2350.     tst GWVA_APP_OBJ_ACC_STATE
  2351.     beq.s .deja_fermee
  2352.  
  2353.     bsr GWVA_APP_OBJ_PRG_CLOSE_VSTATION
  2354.     clr GWVA_APP_OBJ_ACC_STATE
  2355.  
  2356. .deja_fermee:rts
  2357.  
  2358.     endc    ; MDL_EVENTS
  2359.  
  2360. GWVA_APP_OBJ_PRG_OPEN_VSTATION:
  2361.     lea intin,a0        ; start by opening a virtual workstation
  2362.     moveq #10-1,d0
  2363. .fill:    move.w #1,(a0)+        ; most params are 1
  2364.     dbf d0,.fill
  2365.     move.w #2,(a0)+        ; use RC system
  2366.  
  2367.     appel xbios,$4,2
  2368.     add.w #2,d0
  2369.     move.w d0,intin        ; Device identification number (dixit COMPENDIUM p 7.61)
  2370.  
  2371.     v_opnvwk            ; open it
  2372.     tst.w current_handle        ; variable définie dans la librairie de DEVPAC (VDI.S)
  2373.     beq .open_workstation_failed
  2374.  
  2375.     bsr GWVA_APP_OBJ_PRG_INFO_VDI_WORKSTATION 
  2376.  
  2377.     graf_mouse #0        ; arrow please
  2378.     
  2379.     wind_get #0,#WF_WORKXYWH    ; taille du bureau ?
  2380.     move.l int_out+2,GWVA_APP_OBJ_DESKTOP_X
  2381.     move.l int_out+6,GWVA_APP_OBJ_DESKTOP_W
  2382.  
  2383.     ifd MDL_WIND_BITMAP
  2384.  
  2385.     moveq #1,d0
  2386.     move GWVA_APP_OBJ_VDI_WORKSTATION_EXTD+4*2,d1
  2387.     lsl.w d1,d0
  2388.     cmp.w GWVA_APP_OBJ_VDI_WORKSTATION+13*2,d0
  2389.     bne.s .pas_de_palette
  2390.  
  2391.     pea GWVA_APP_OBJ_SAVE_PALETTE
  2392.     move GWVA_APP_OBJ_VDI_WORKSTATION+13*2,-(sp)
  2393.     clr -(sp)
  2394.     appel xbios,$5e,10
  2395. .pas_de_palette:
  2396.  
  2397.     endc            ; ifd MDL_WIND_BITMAP
  2398.  
  2399.     vst_height GWVA_APP_OBJ_SYSTEM_LARGEFONT_HEIGHT
  2400.     move.w ptsout+2*2,GWVA_APP_OBJ_SYSTEM_LARGEFONT_CELL_WIDTH
  2401.     move.w ptsout+2*3,GWVA_APP_OBJ_SYSTEM_LARGEFONT_CELL_HEIGHT
  2402.  
  2403.     vst_height GWVA_APP_OBJ_SYSTEM_SMALLFONT_HEIGHT
  2404.     move.w ptsout+2*2,GWVA_APP_OBJ_SYSTEM_SMALLFONT_CELL_WIDTH
  2405.     move.w ptsout+2*3,GWVA_APP_OBJ_SYSTEM_SMALLFONT_CELL_HEIGHT
  2406.  
  2407.     vst_height GWVA_APP_OBJ_TEXT_HEIGHT
  2408.  
  2409.     clr d7
  2410.     rts
  2411.  
  2412. .open_workstation_failed:
  2413.     moveq #GWVA_ERROR_GENERIC,d7
  2414.     rts
  2415.  
  2416. GWVA_APP_OBJ_PRG_INFO_VDI_WORKSTATION:    ; on demande la station courante
  2417.     vq_extnd #0
  2418.  
  2419.     lea intout,a0
  2420.     lea GWVA_APP_OBJ_VDI_WORKSTATION,a1
  2421.     move.w #45-1,d0
  2422. .recopy_vdi_parameters1:
  2423.     move.w (a0)+,(a1)+
  2424.     dbf d0,.recopy_vdi_parameters1
  2425.  
  2426.     lea ptsout,a0
  2427.     move.w #12-1,d0
  2428. .recopy_vdi_parameters2:
  2429.     move.w (a0)+,(a1)+
  2430.     dbf d0,.recopy_vdi_parameters2
  2431.  
  2432.     vq_extnd #1
  2433.  
  2434.     lea intout,a0
  2435.     lea GWVA_APP_OBJ_VDI_WORKSTATION_EXTD,a1
  2436.     move.w #45-1,d0
  2437. .recopy_vdi_parameters3:
  2438.     move.w (a0)+,(a1)+
  2439.     dbf d0,.recopy_vdi_parameters3
  2440.  
  2441.     lea ptsout,a0
  2442.     move.w #12-1,d0
  2443. .recopy_vdi_parameters4:
  2444.     move.w (a0)+,(a1)+
  2445.     dbf d0,.recopy_vdi_parameters4
  2446.  
  2447.     vqt_attributes
  2448.     movem.w ptsout,d0-d3    ; -> largeur/hauteur caractère et cellule
  2449.     movem.w d0-d3,GWVA_APP_OBJ_TEXT_WIDTH
  2450. ; d1.w : character height = taille par défaut de la police système lors de l'ouverture
  2451. ; de la station de travail
  2452.     move.w d1,GWVA_APP_OBJ_SYSTEM_LARGEFONT_HEIGHT    ; par défaut
  2453.     move.w #4,GWVA_APP_OBJ_SYSTEM_SMALLFONT_HEIGHT    ; taille des polices systèmes (petite et normale)
  2454.  
  2455.     cmp.w #$400,global+_AESversion
  2456.     blt.s .pas_de_appl_getinfo
  2457.  
  2458.     appl_getinfo #0
  2459.     move.w int_out+1*2,GWVA_APP_OBJ_SYSTEM_LARGEFONT_HEIGHT
  2460.  
  2461.     appl_getinfo #1
  2462.     move.w int_out+1*2,GWVA_APP_OBJ_SYSTEM_SMALLFONT_HEIGHT
  2463.  
  2464. .pas_de_appl_getinfo:
  2465.  
  2466.     rts
  2467.  
  2468. GWVA_APP_OBJ_PRG_CLOSE_VSTATION:    ; que pour les accessoires
  2469.     ifd MDL_WIND
  2470.     bsr GWVA_WIND_OBJ_PRG_DELETE_ALL_WIND
  2471.     endc            ; ifd MDL_WIND
  2472.  
  2473.     graf_mouse    #0        ; arrow please
  2474.     v_clsvwk            ; then closing the virtual workstation
  2475.  
  2476.     ifd MDL_WIND_BITMAP
  2477.     bsr GWVA_WBITM_OBJ_PRG_RESET_DESK_PALETTE
  2478.     endc            ; ifd MDL_WIND_BITMAP
  2479.  
  2480.     rts
  2481.  
  2482. GWVA_OPEN_WORKSTATION_FAILED:
  2483.     lea GWVA_ALERT_V_OPEN_FAILED,a0
  2484.     move #1,d0
  2485.     bsr ALERT_BOX
  2486.     bra GWVA_BRANCH_IF_OPEN_WORKSTATION_FAILED
  2487.  
  2488. GWVA_APPL_INIT_FAILED:
  2489.     lea GWVA_ALERT_AP_INIT_FAILED,a0
  2490.     move #1,d0
  2491.     bsr ALERT_BOX
  2492.     bra GWVA_BRANCH_IF_APPL_INIT_FAILED
  2493.  
  2494.     endc            ; ifd MDL_GEM
  2495.  
  2496. *--------------------------------------------------------------------------*
  2497. *--------------------------------------------------------------------------*
  2498. *--------------------------------------------------------------------------*
  2499. *-------------------        FIN DU CODE VISUAL      -----------------------*
  2500. *--------------------------------------------------------------------------*
  2501. *--------------------------------------------------------------------------*
  2502. *--------------------------------------------------------------------------*
  2503.  
  2504.     include library\library.s
  2505.  
  2506.     ifd MDL_RELOCATE_RSC
  2507.     include library\relocate.s
  2508.     endc
  2509.  
  2510.     ifd LIB_XHDI
  2511.     include v_a.ext\xhdicall.s
  2512.     endc
  2513.  
  2514.     ifd LIB_RECURSIVE_FILE_SEARCH
  2515.     include v_a.ext\filesrch.s
  2516.     endc
  2517.  
  2518.     ifd MDL_WIND
  2519.  
  2520.     ifd MDL_WIND_FORM
  2521.  
  2522.     include library\wind_frm.s
  2523.  
  2524.     ifd MDL_MULTIFORM
  2525.     include library\mltform.s
  2526.     endc
  2527.  
  2528.     endc    ; ifd MDL_WIND_FORM
  2529.  
  2530.     include library\windows.s
  2531.     include library\wmredraw.s
  2532.  
  2533.     ifd MDL_WIND_TEXT
  2534.     include library\wind_txt.s
  2535.     endc
  2536.  
  2537.     ifd MDL_WIND_BITMAP
  2538.     include library\wind_bmp.s
  2539.     endc
  2540.     
  2541.     ifd MDL_WIND_MENU
  2542.     include library\windmenu.s
  2543.     endc
  2544.  
  2545.     endc    ; ifd MDL_WIND
  2546.  
  2547.     ifd MDL_GEM
  2548.     include aeslib.s
  2549.     include vdilib.s
  2550.  TEXT
  2551.     endc
  2552.  
  2553. *--------------------------------------------------------------------------*
  2554.  
  2555.     DATA
  2556.  
  2557.     ifd MDL_EVENTS
  2558.  
  2559. GWVA_APP_OBJ_EVNT_TABLE:
  2560.     dc.w AC_OPEN,GWVA_APP_OBJ_AC_OPEN
  2561.     dc.w AC_CLOSE,GWVA_APP_OBJ_AC_CLOSE
  2562.     dc.w AP_TERM,GWVA_APP_OBJ_AP_TERM
  2563.     dc.w AP_TFAIL,GWVA_APP_OBJ_AP_TFAIL
  2564.     dc.w SHUT_COMPLETED,GWVA_APP_OBJ_SHUT_COMPLETED
  2565.     dc.w RESCH_COMPLETED,GWVA_APP_OBJ_RESCH_COMPLETED
  2566.     dc.w AP_DRAGDROP,GWVA_APP_OBJ_AP_DRAG_DROP
  2567.     dc.w SH_WDRAW,GWVA_APP_OBJ_SH_WDRAW
  2568.     dc.w CH_EXIT,GWVA_APP_OBJ_CH_EXIT
  2569.     dc.w -1
  2570.  
  2571.     endc            ; ifd MDL_EVENTS
  2572.  
  2573. GWVA_APP_OBJ_RETURN_CODE: dc.w -1
  2574.  
  2575.     ifd MDL_GEM
  2576. GWVA_ALERT_NO_RSC:      dc.b '[3][ Ressource File | not found ][ Suspend ]',0
  2577. GWVA_ALERT_AP_INIT_FAILED:dc.b '[3][ AP Init failed | cannot run ][ Strange ]',0
  2578. GWVA_ALERT_V_OPEN_FAILED: dc.b '[3][ Could no open | virtual Workstation ][ Cancel ]',0
  2579.     endc
  2580.  
  2581. GWVA_APP_OBJ_COPYRIGHT_MESSAGE:    dc.b 'Written in Visual Assembler 4.1 ╜ Gen & Wax 1996',0
  2582. GWVA_APP_OBJ_VISUAL_VERSION:    dc.b '4102',0
  2583. GWVA_APP_OBJ_REGISTER_STRING:    dc.b 'RN : UNREGISTERED version for FREEWARE programs',0
  2584.  
  2585.     ; The label GWVA_APP_OBJ_REGISTER_MESSAGE must point on to a
  2586.     ; string 'RN : ' followed by your full registration string
  2587.     ; if you intend to earn money with your program (SHAREWARE or SOLD)
  2588.  
  2589.     ; Le label GWVA_APP_OBJ_REGISTER_MESSAGE doit pointer sur une
  2590.     ; chaine 'RN : ' suivie de votre numéro d'enregistrement complet
  2591.     ; si vous diffusez un produit qui doit vous rapporter de l'argent
  2592.     ; (SHAREWARE ou VENDU)
  2593.  even
  2594.  
  2595.     ifd MDL_WIND
  2596.  
  2597. GWVA_WTEXT_OBJ_SHORTCUTS:
  2598.     dc.w $48*256
  2599.     dc.w WA_UPLINE
  2600.     dc.w $50*256
  2601.     dc.w WA_DNLINE
  2602.     dc.w $4B*256
  2603.     dc.w WA_LFLINE
  2604.     dc.w $4D*256
  2605.     dc.w WA_RTLINE
  2606.     dc.w $48*256+'8'
  2607.     dc.w WA_UPPAGE
  2608.     dc.w $50*256+'2'
  2609.     dc.w WA_DNPAGE
  2610.     dc.w $4B*256+'4'
  2611.     dc.w WA_LFPAGE
  2612.     dc.w $4D*256+'6'
  2613.     dc.w WA_RTPAGE
  2614.     dc.l -1
  2615.  
  2616. GWVA_WIND_OBJ_PRG_WM_JUMP_TAB:
  2617.     dc.l GWVA_WIND_OBJ_PRG_WM_REDRAW
  2618.     dc.l GWVA_WIND_OBJ_PRG_WM_TOPPED
  2619.     dc.l GWVA_WIND_OBJ_PRG_WM_CLOSED
  2620.     dc.l GWVA_WIND_OBJ_PRG_WM_FULLED
  2621.     dc.l GWVA_WIND_OBJ_PRG_WM_ARROWED
  2622.     dc.l GWVA_WIND_OBJ_PRG_WM_HSLID
  2623.     dc.l GWVA_WIND_OBJ_PRG_WM_VSLID
  2624.     dc.l GWVA_WIND_OBJ_PRG_WM_SIZED
  2625.     dc.l GWVA_WIND_OBJ_PRG_WM_MOVED
  2626.     dc.l GWVA_WIND_OBJ_PRG_WM_NEWTOP        ; 0
  2627.     dc.l GWVA_WIND_OBJ_PRG_WM_UNTOPPED
  2628.     dc.l GWVA_WIND_OBJ_PRG_WM_ONTOP
  2629.     dc.l 0
  2630.     dc.l GWVA_WIND_OBJ_PRG_WM_BOTTOM
  2631.     dc.l GWVA_WIND_OBJ_PRG_WM_ICONIFY
  2632.     dc.l GWVA_WIND_OBJ_PRG_WM_UNICONIFY
  2633.     dc.l GWVA_WIND_OBJ_PRG_WM_ALLICONIFY
  2634.     dc.l GWVA_WIND_OBJ_PRG_WM_TOOLBAR        ; ?_ERROR_?
  2635.  
  2636.  
  2637.     ifd OPT_DEBUG_VISUAL_WIND_SYSTEM_OBJ_EVNT
  2638.  
  2639. GWVA_DEBUG_EVNT_TABLE:
  2640.     dc.w MN_SELECTED
  2641.     dc.l GWVA_DEBUG_EVNT_MN_SELECTED
  2642.     dc.w WM_REDRAW    
  2643.     dc.l GWVA_DEBUG_EVNT_WM_REDRAW    
  2644.     dc.w WM_TOPPED
  2645.     dc.l GWVA_DEBUG_EVNT_WM_TOPPED
  2646.     dc.w WM_CLOSED
  2647.     dc.l GWVA_DEBUG_EVNT_WM_CLOSED
  2648.     dc.w WM_FULLED    
  2649.     dc.l GWVA_DEBUG_EVNT_WM_FULLED    
  2650.     dc.w WM_ARROWED    
  2651.     dc.l GWVA_DEBUG_EVNT_WM_ARROWED    
  2652.     dc.w WM_HSLID    
  2653.     dc.l GWVA_DEBUG_EVNT_WM_HSLID    
  2654.     dc.w WM_VSLID    
  2655.     dc.l GWVA_DEBUG_EVNT_WM_VSLID    
  2656.     dc.w WM_SIZED    
  2657.     dc.l GWVA_DEBUG_EVNT_WM_SIZED    
  2658.     dc.w WM_MOVED    
  2659.     dc.l GWVA_DEBUG_EVNT_WM_MOVED    
  2660.     dc.w WM_NEWTOP    
  2661.     dc.l GWVA_DEBUG_EVNT_WM_NEWTOP    
  2662.     dc.w WM_UNTOPPED    
  2663.     dc.l GWVA_DEBUG_EVNT_WM_UNTOPPED    
  2664.     dc.w WM_ONTOP    
  2665.     dc.l GWVA_DEBUG_EVNT_WM_ONTOP    
  2666.     dc.w WM_BOTTOM    
  2667.     dc.l GWVA_DEBUG_EVNT_WM_BOTTOM    
  2668.     dc.w WM_ICONIFY    
  2669.     dc.l GWVA_DEBUG_EVNT_WM_ICONIFY    
  2670.     dc.w WM_UNICONIFY
  2671.     dc.l GWVA_DEBUG_EVNT_WM_UNICONIFY
  2672.     dc.w WM_ALLICONIFY
  2673.     dc.l GWVA_DEBUG_EVNT_WM_ALLICONIFY
  2674.     dc.w WM_TOOLBAR        
  2675.     dc.l GWVA_DEBUG_EVNT_WM_TOOLBAR        
  2676.     dc.w AC_OPEN        
  2677.     dc.l GWVA_DEBUG_EVNT_AC_OPEN        
  2678.     dc.w AC_CLOSE        
  2679.     dc.l GWVA_DEBUG_EVNT_AC_CLOSE        
  2680.     dc.w AP_TERM        
  2681.     dc.l GWVA_DEBUG_EVNT_AP_TERM        
  2682.     dc.w AP_TFAIL        
  2683.     dc.l GWVA_DEBUG_EVNT_AP_TFAIL        
  2684.     dc.w AP_RESCHG        
  2685.     dc.l GWVA_DEBUG_EVNT_AP_RESCHG        
  2686.     dc.w SHUT_COMPLETED
  2687.     dc.l GWVA_DEBUG_EVNT_SHUT_COMPLETED
  2688.     dc.w RESCH_COMPLETED
  2689.     dc.l GWVA_DEBUG_EVNT_RESCH_COMPLETED
  2690.     dc.w AP_DRAGDROP        
  2691.     dc.l GWVA_DEBUG_EVNT_AP_DRAGDROP        
  2692.     dc.w SH_WDRAW        
  2693.     dc.l GWVA_DEBUG_EVNT_SH_WDRAW        
  2694.     dc.w CH_EXIT        
  2695.     dc.l GWVA_DEBUG_EVNT_CH_EXIT        
  2696.     dc.w -1
  2697.  
  2698. GWVA_DEBUG_EVNT_MN_SELECTED:    dc.b "MN_SELECTED",0
  2699. GWVA_DEBUG_EVNT_WM_REDRAW:    dc.b "WM_REDRAW",0
  2700. GWVA_DEBUG_EVNT_WM_TOPPED:    dc.b "WM_TOPPED",0
  2701. GWVA_DEBUG_EVNT_WM_CLOSED:    dc.b "WM_CLOSED",0
  2702. GWVA_DEBUG_EVNT_WM_FULLED:    dc.b "WM_FULLED",0
  2703. GWVA_DEBUG_EVNT_WM_ARROWED:    dc.b "WM_ARROWED",0
  2704. GWVA_DEBUG_EVNT_WM_HSLID:    dc.b "WM_HSLID",0
  2705. GWVA_DEBUG_EVNT_WM_VSLID:    dc.b "WM_VSLID",0
  2706. GWVA_DEBUG_EVNT_WM_SIZED:    dc.b "WM_SIZED",0
  2707. GWVA_DEBUG_EVNT_WM_MOVED:    dc.b "WM_MOVED",0
  2708. GWVA_DEBUG_EVNT_WM_NEWTOP:    dc.b "WM_NEWTOP",0
  2709. GWVA_DEBUG_EVNT_WM_UNTOPPED:    dc.b "WM_UNTOPPED",0
  2710. GWVA_DEBUG_EVNT_WM_ONTOP:    dc.b "WM_ONTOP",0
  2711. GWVA_DEBUG_EVNT_WM_BOTTOM:    dc.b "WM_BOTTOM",0
  2712. GWVA_DEBUG_EVNT_WM_ICONIFY:    dc.b "WM_ICONIFY",0
  2713. GWVA_DEBUG_EVNT_WM_UNICONIFY:    dc.b "WM_UNICONIFY",0
  2714. GWVA_DEBUG_EVNT_WM_ALLICONIFY:    dc.b "WM_ALLICONIFY",0
  2715. GWVA_DEBUG_EVNT_WM_TOOLBAR:    dc.b "WM_TOOLBAR",0
  2716. GWVA_DEBUG_EVNT_AC_OPEN:    dc.b "AC_OPEN",0
  2717. GWVA_DEBUG_EVNT_AC_CLOSE:    dc.b "AC_CLOSE",0
  2718. GWVA_DEBUG_EVNT_AP_TERM:    dc.b "AP_TERM",0
  2719. GWVA_DEBUG_EVNT_AP_TFAIL:    dc.b "AP_TFAIL",0
  2720. GWVA_DEBUG_EVNT_AP_RESCHG:    dc.b "AP_RESCHG",0
  2721. GWVA_DEBUG_EVNT_SHUT_COMPLETED:    dc.b "SHUT_COMPLETED",0
  2722. GWVA_DEBUG_EVNT_RESCH_COMPLETED:    dc.b "RESCH_COMPLETED",0
  2723. GWVA_DEBUG_EVNT_AP_DRAGDROP:    dc.b "AP_DRAGDROP",0
  2724. GWVA_DEBUG_EVNT_SH_WDRAW:    dc.b "SH_WDRAW",0
  2725. GWVA_DEBUG_EVNT_CH_EXIT:    dc.b "CH_EXIT",0
  2726.  
  2727. GWVA_WIND_SYSTEM_DEBUG_EVNT_ALERT:
  2728.     dc.b "[3][A System mesg has been received|"
  2729.     dc.b     "   Message : "
  2730. GWVA_WIND_SYSTEM_DEBUG_EVNT_ALERT_MSG_NR:    dc.b "SHUT_COMPLETED "
  2731.     dc.b    "|From Appl : "
  2732. GWVA_WIND_SYSTEM_DEBUG_EVNT_ALERT_APP_ID:    dc.b "000"
  2733.     dc.b ", Extd size: "
  2734. GWVA_WIND_SYSTEM_DEBUG_EVNT_ALERT_EXT_SIZE:    dc.b "000"
  2735.     dc.b    "|Word4(handle)=$"
  2736. GWVA_WIND_SYSTEM_DEBUG_EVNT_ALERT_WORD4:    dc.b "0000"
  2737.     dc.b ",Word5=$"
  2738. GWVA_WIND_SYSTEM_DEBUG_EVNT_ALERT_WORD5:    dc.b "0000"
  2739.     dc.b    "|Wrd6=$"
  2740. GWVA_WIND_SYSTEM_DEBUG_EVNT_ALERT_WORD6:    dc.b "0000"
  2741.     dc.b ",Wrd7=$"
  2742. GWVA_WIND_SYSTEM_DEBUG_EVNT_ALERT_WORD7:    dc.b "0000"
  2743.     dc.b ",Wo8=$"
  2744. GWVA_WIND_SYSTEM_DEBUG_EVNT_ALERT_WORD8:    dc.b "0000"
  2745.     dc.b "][Continue]",0
  2746.  even
  2747.     endc            ; ifd OPT_DEBUG_VISUAL_WIND_SYSTEM_OBJ_EVNT
  2748.  
  2749.     ifd MDL_WIND_FORM
  2750.  
  2751.     ifd OPT_DEBUG_VISUAL_FORM_OBJ_EVNT
  2752.  
  2753. GWVA_FORM_DEBUG_EVNT_TABLE:    dc.b "GWVA_EVNT_CLICK     ",0
  2754. GWVA_FORM_DEBUG_EVNT_TABLE_ETALON:    dc.b "GWVA_EVNT_DCLICK    ",0
  2755.             dc.b "GWVA_EVNT_GOTFOCUS  ",0
  2756.             dc.b "GWVA_EVNT_LOSTFOCUS ",0
  2757.             dc.b "GWVA_EVNT_SELECTED  ",0
  2758.             dc.b "GWVA_EVNT_UNSELECTED",0
  2759.             dc.b "GWVA_EVNT_CHANGED   ",0
  2760.  
  2761. GWVA_FORM_DEBUG_EVNT_ALERT:
  2762.     dc.b "[3][Visual Assembleur Debug message|"
  2763.     dc.b     "A FORM msg is trying to be send|"
  2764.     dc.b     "   GEM Window handle : "
  2765. GWVA_FORM_DEBUG_EVNT_ALERT_WIND_NR:    dc.b "000"
  2766.     dc.b    "| Formulary : "
  2767. GWVA_FORM_DEBUG_EVNT_ALERT_FORM_NR:    dc.b "000"
  2768.     dc.b ". Object : "
  2769. GWVA_FORM_DEBUG_EVNT_ALERT_OBJ_NR:    dc.b "000"
  2770.     dc.b    "| Message: "
  2771. GWVA_FORM_DEBUG_EVNT_ALERT_MSG:    dc.b "GWVA_EVNT_UNSELECTED "
  2772.     dc.b "][Continue]",0
  2773.  even
  2774.     endc            ; ifd OPT_DEBUG_VISUAL_FORM_OBJ_EVNT
  2775.  
  2776.     endc            ; ifd MDL_WIND_FORM
  2777.  
  2778.     ifd MDL_WIND_MENU
  2779.  
  2780. GWVA_WIND_OBJ_MENU_TREE_ARROWS:    ; objet pour les fleches dans les menu des fenetres
  2781.     dc.w -1,1,2,G_BOX
  2782.     dc.w 0,$0010
  2783.     dc.l $00001100
  2784.     dc.w 0,0,4,1
  2785.     
  2786.     dc.w 2,-1,-1,G_BOXCHAR
  2787.     dc.w 0,0
  2788.     dc.l (4<<24)|$00001100
  2789.     dc.w 0,0,2,1
  2790.  
  2791.     dc.w 0,-1,-1,G_BOXCHAR
  2792.     dc.w $0020,0
  2793.     dc.l (3<<24)|$00001100
  2794.     dc.w 2,0,2,1
  2795.  
  2796.     endc            ; ifd MDL_WIND_MENU
  2797.  
  2798.     endc            ; ifd MDL_WIND
  2799.  
  2800. *--------------------------------------------------------------------------*
  2801.  
  2802.     BSS
  2803.             ds.b GWVA_APP_OBJ_STACK_SIZE
  2804. GWVA_APP_OBJ_STACK:        ds.l 1
  2805. GWVA_APP_OBJ_PTR:        ds.l 1
  2806. GWVA_APP_OBJ_IS_ACC_PRG:    ds.w 1    ; 0 : acc, 1 : app
  2807. GWVA_APP_OBJ_BASE_PAGE:        ds.l 1
  2808. GWVA_APP_OBJ_CMD_LINE_PTR:    ds.l 1
  2809. GWVA_APP_OBJ_CMD_LINE_SIZE:    ds.w 1
  2810. GWVA_APP_OBJ_DTA:        ds.b 44
  2811. GWVA_APP_OBJ_STARTED_PATH:    ds.b GWVA_MAX_PATH_LENGTH
  2812.  
  2813. GWVA_APP_OBJ_SEARCH_IN_OUT:        ds.l 2    ; le paramètre pour la recherche COOKIE,XBRA
  2814. GWVA_APP_OBJ_COOKIE_COPRO:        ds.w 1    ; 0=aucun 1=68881 2=68882
  2815. GWVA_APP_OBJ_COOKIE_TOS_VERSION:        ds.w 1    : ex. : $0404
  2816. GWVA_APP_OBJ_COOKIE_MINT:        ds.w 1    ; 0 ou la version
  2817. GWVA_APP_OBJ_COOKIE_MAGIC:        ds.l 1    ; 0 ou un pointeur sur la structure de MagiC
  2818. GWVA_APP_OBJ_COOKIE_GENEVA:        ds.l 1    ; 0 ou un pointeur sur la structure de Geneva
  2819. GWVA_APP_OBJ_COOKIE_SELECTRIX_PTR:        ds.l 1    ; Selctrix base adress (0 si pas sélectrix)
  2820. GWVA_APP_OBJ_COOKIE_SELECTRIX_COMM_WORD:    ds.l 1    ; ad. du word communication
  2821. GWVA_APP_OBJ_COOKIE_SELECTRIX_OUT_COUNT:    ds.l 1    ; ad. du compteur sortie
  2822. GWVA_APP_OBJ_COOKIE_SELECTRIX_OUT_PTR:    ds.l 1    ; ad. du pointeur sortie
  2823.  
  2824. GWVA_OLD_SUPERVISOR_STACK:    ds.l 1    ; pour macro SUPER
  2825.  
  2826.     ifd MDL_GEM
  2827.  
  2828.     ifd MDL_EVENTS
  2829. GWVA_APP_OBJ_ACC_NUMBER:    ds.w 1    ; pas d'acc sans events
  2830.     endc
  2831.  
  2832.     ifd MDL_RELOCATE_RSC
  2833. GWVA_APP_OBJ_ADD_MALLOC_RSC_ICN:    ds.l 2
  2834.     endc
  2835.  
  2836. GWVA_APP_OBJ_TEXT_WIDTH:    ds.w 1
  2837. GWVA_APP_OBJ_TEXT_HEIGHT:    ds.w 1
  2838. GWVA_APP_OBJ_CELL_WIDTH:    ds.w 1
  2839. GWVA_APP_OBJ_CELL_HEIGHT:    ds.w 1
  2840.  
  2841. GWVA_APP_OBJ_SYSTEM_LARGEFONT_HEIGHT:    ds.w 1
  2842. GWVA_APP_OBJ_SYSTEM_LARGEFONT_CELL_WIDTH:    ds.w 1
  2843. GWVA_APP_OBJ_SYSTEM_LARGEFONT_CELL_HEIGHT:    ds.w 1
  2844. GWVA_APP_OBJ_SYSTEM_SMALLFONT_HEIGHT:    ds.w 1
  2845. GWVA_APP_OBJ_SYSTEM_SMALLFONT_CELL_WIDTH:    ds.w 1
  2846. GWVA_APP_OBJ_SYSTEM_SMALLFONT_CELL_HEIGHT:    ds.w 1
  2847.  
  2848. GWVA_APP_OBJ_DESKTOP_X:        ds.w 1
  2849. GWVA_APP_OBJ_DESKTOP_Y:        ds.w 1
  2850. GWVA_APP_OBJ_DESKTOP_W:        ds.w 1
  2851. GWVA_APP_OBJ_DESKTOP_H:        ds.w 1
  2852.  
  2853. GWVA_APP_OBJ_TMP_ADD_TREE:    ds.l 1    ; sert à plein de routine
  2854.  
  2855. GWVA_APP_OBJ_VDI_WORKSTATION:    ds.w 57
  2856. GWVA_APP_OBJ_VDI_WORKSTATION_EXTD:    ds.w 57
  2857.  
  2858.     ifd MDL_EVENTS
  2859.  
  2860.     ifd MDL_MENU
  2861. GWVA_APP_OBJ_TMP_MENU_OBJ:    ds.b LONG_STRUC_MENU
  2862.     endc
  2863.  
  2864. GWVA_APP_OBJ_TMP_WIND_HANDLE:    ds.w 1    ; sert si event_button
  2865. GWVA_APP_OBJ_ACC_STATE:        ds.w 1    ; 0=closed 1=opened
  2866.  
  2867. GWVA_APP_OBJ_EVENT_BITS:    ds.w 1
  2868. GWVA_APP_OBJ_EVNT_MULTI_MX:    ds.w 1    ; position souris
  2869. GWVA_APP_OBJ_EVNT_MULTI_MY:    ds.w 1
  2870. GWVA_APP_OBJ_EVNT_MULTI_MB:    ds.w 1    ; état des boutons souris
  2871. GWVA_APP_OBJ_EVNT_MULTI_KS:    ds.w 1    ; état des touches spéciales
  2872. GWVA_APP_OBJ_EVNT_MULTI_KC:    ds.w 1    ; touche
  2873. GWVA_APP_OBJ_EVNT_MULTI_MC:    ds.w 1    ; nbre de clik souris
  2874. GWVA_APP_OBJ_MSG_BUF:        ds.w 8    ; pour event-multi
  2875. GWVA_APP_OBJ_MSG_EXT_BUF:    ds.b 256    ; pour appl_read - appl_write
  2876.  
  2877. ; Utilisé par RELOCATE, WMREDRAW, WINDMENU
  2878. GWVA_APP_MFDB_SRC:        ds.l 1    ; buffers pour vro_cpyfrm & vrt_ & vr_trnfm
  2879.             ds.w 8
  2880. GWVA_APP_MFDB_DEST:        ds.l 1
  2881.             ds.w 8
  2882.  
  2883.     ifd MDL_WIND
  2884.  
  2885. GWVA_APP_OBJ_WIND_LIST:        ds.l GWVA_APP_OBJ_MAX_NUMBER_WIND+1
  2886.  
  2887. GWVA_WIND_OBJ_REDRAW_BOX:    ds.w 4
  2888. GWVA_WIND_OBJ_REDRAW_CLIP:    ds.w 4
  2889.  
  2890. GWVA_WIND_OBJ_FORM_NUM_OBJ_REDRAW:    ds.w 1    ; pour le redraw partiel et intermédiaire
  2891. GWVA_WIND_OBJ_FORM_DEPTH_OBJ_REDRAW:ds.w 1    ; pour le redraw partiel et intermédiaire
  2892. GWVA_WIND_OBJ_FORM_WHAT_OBJ_REDRAW:    ds.w 1    ; -1=all wind, 0=contents, 1=toolbar, 2=menu
  2893.  
  2894. GWVA_WIND_OBJ_EXTERNAL_X_TEMP:    ds.w 1
  2895. GWVA_WIND_OBJ_EXTERNAL_Y_TEMP:    ds.w 1
  2896.  
  2897.     ifd OPT_GWVA_WIND_REDRAW_HIDE_MOUSE
  2898. GWVA_WIND_OBJ_REDRAW_MOUSE_STATE:    ds.w 1
  2899.     endc
  2900.  
  2901.     ifd MDL_WIND_FORM
  2902.  
  2903. GWVA_WIND_OBJ_REDRAW_INTERSECT_OBJECT:    ds.w 4
  2904. GWVA_WFORM_OBJ_TMP_POPUP_OBJ:    ds.b LONG_STRUC_MENU
  2905.  
  2906.     ifd PATCH_WIND_FORM_CUSTOM_EDITABLE_TEXT
  2907. GWVA_WFORM_OBJ_CURSOR_POS_TEXT:    ds.w 1
  2908. GWVA_WFORM_OBJ_INTERMEDIAIRE_TEXT:    ds.b 256+1
  2909.     endc
  2910.  
  2911.     endc            ; ifd MDL_WIND_FORM
  2912.  
  2913.     ifd MDL_WIND_MENU
  2914. GWVA_WIND_OBJ_MENU_ITEM:    ds.w 1
  2915. GWVA_WIND_OBJ_MENU_ITEM_STATE:    ds.w 1
  2916. GWVA_WIND_OBJ_MENU_CLIPPING:    ds.w 4
  2917. GWVA_WIND_OBJ_MENU_DROPDOWN_LIST:    ds.w 1
  2918. GWVA_WIND_OBJ_MENU_SUBITEM:    ds.w 1
  2919. GWVA_WIND_OBJ_MENU_SUBITEM_STATE:    ds.w 1
  2920. GWVA_WIND_OBJ_MENU_PTR_MALLOC:    ds.l 1
  2921. GWVA_WIND_OBJ_MENU_MFDB:    ds.l 1
  2922.             ds.w 8
  2923. GWVA_WIND_OBJ_MENU_PTSIN_PARAM:    ds.w 8
  2924.     endc            ; ifd MDL_WIND_MENU
  2925.  
  2926.     ifd MDL_WIND_TEXT
  2927.  
  2928. GWVA_WIND_OBJ_NEW_TEXT_VAR:    ds.w 2
  2929. GWVA_WIND_OBJ_REDRAW_INTERSEC:    ds.w 4
  2930. GWVA_WIND_OBJ_REDRAW_BLANK:    ds.w 4
  2931. GWVA_WTEXT_OBJ_DUMMY:        ds.l 1
  2932. GWVA_WTEXT_OBJ_INTERMEDIAIRE:    ds.b 256+1+1
  2933.  
  2934.     endc            ; ifd MDL_WIND_TEXT
  2935.  
  2936.     ifd MDL_WIND_BITMAP
  2937.  
  2938. GWVA_APP_OBJ_SAVE_PALETTE:    ds.l 256
  2939.  
  2940.     endc            ; ifd MDL_WIND_BITMAP
  2941.  
  2942.     endc            ; ifd MDL_WIND
  2943.  
  2944.     endc            ; ifd MDL_EVENTS
  2945.  
  2946.     endc            ; ifd MDL_GEM
  2947.  
  2948.     TEXT
  2949.  
  2950. *--------------------------------------------------------------------------*
  2951.